Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26

Discussione: [java] classe Vector

  1. #1

    [java] classe Vector

    Mi hanno costretto ad utilizzare la classe Vector... ne farei volentieri a meno, preferisco la "rudimentalità" degli array.
    Il fatto è che in fase di compilazione è tutto ok.

    Quando però comincio ad inserire oggetti nel vettore ecco che cosa mi viene detto:

    Exception in thread "main" Java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1
    at Java.util.Vector.get(Vector.Java:713)


    ecc ecc.

    Qualcuno mi sa dire cosa succede?
    Grazie infinite
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    206
    Ciao, se postassi un pò di codice sarebbe meglio!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    206
    comunque dal messaggio di errore probabilmente richiami un valore dal vettore ad una posizione inesistente o il vettore è vuoto o hai superato l'indice!!!

  4. #4

    MANNAGGIA...

    ... è un lavorone da nulla!
    E' abbastanza lunghetto.
    Provo a trarre i passi salienti!

    Il programma è una volgare Agenda di appuntamenti gestita da shell. (niente interazione con i database e roba varia...)

    La mia agenda è, in pratica un vettore di appuntamenti.

    Ecco come viene aggiunto un appuntamento nel vettore:

    public static void aggiungiAppuntamento(Vector v, int gg, int mm, int oi, int of, String de)
    {
    // Controllo che i dati siano stati inseriti correttamente

    if(Appuntamento.check(gg, mm, oi, of))
    {

    Appuntamento oggetto = new Appuntamento(gg, mm, oi, of, de);

    // Caso base il vettore è vuoto
    if(v.isEmpty())
    {
    v.add(oggetto);
    }

    else
    {
    //controllo che non ci sia un altro appuntamento coincidente

    if (BinarySearch (v, oggetto.getDay(), oggetto.getMonth(), oggetto.getStart(),oggetto.getEnd()) != -1)
    {
    System.out.println("Appuntamenti coincidenti: Ripetere operazione");
    }

    // E' probabile che sia questa la parte incriminata....

    v.add(oggetto);
    mergeSort(v, 0, v.size() -1);
    }
    }
    else
    {
    System.out.println("Valori errati! Ripetere inserimento");
    }
    }


    La ricerca binaria mi evita che ci siano contrasti tra gli appuntamenti in agenda.
    MergeSort mi ordina i vettori in agenda a seconda dell'ora, del giorno e del mese.
    Ti fornisco entrambi gli algoritmi:

    public static void merge(Vector v, int from, int mid, int to)
    {
    int n = to - from + 1;
    // Dimensione dell'intervallo da findere

    Vector b = new Vector(n);
    int i1 = from;
    int i2 = mid + 1;
    int j = 0;
    while(i1 <= mid && i2 <= to)
    {
    if(((Appuntamento) v.get(i1)).getMonth() < ((Appuntamento) v.get(i2)).getMonth())
    {
    b.set(j, ((Appuntamento) v.get(i1)));
    i1++;
    }

    if(((Appuntamento) v.get(i1)).getMonth() == ((Appuntamento) v.get(i2)).getMonth())
    {
    if(((Appuntamento) v.get(i1)).getDay() < ((Appuntamento) v.get(i2)).getDay())
    {
    b.set(j, ((Appuntamento) v.get(i1)));
    i1++;
    }

    if(((Appuntamento) v.get(i1)).getDay() == ((Appuntamento) v.get(i2)).getDay())
    {
    if(((Appuntamento) v.get(i1)).getStart() < ((Appuntamento) v.get(i2)).getStart())
    {
    b.set(j, ((Appuntamento) v.get(i1)));
    i1++;
    }

    else
    {
    b.set(j, ((Appuntamento) v.get(i2)));
    i2++;
    }
    }

    if(((Appuntamento) v.get(i1)).getDay() > ((Appuntamento) v.get(i2)).getDay())
    {
    b.set(j, ((Appuntamento) v.get(i2)));
    i2++;
    }
    }

    if(((Appuntamento) v.get(i1)).getMonth() > ((Appuntamento) v.get(i2)).getMonth())
    {
    b.set(j, ((Appuntamento) v.get(i2)));
    i2++;
    }

    j++;
    }

    while (i1 <= mid)
    {
    b.set(j, ((Appuntamento) v.get(i1)));
    i1++;
    j++;
    }

    while (i2 <= to)
    {
    b.set(j, ((Appuntamento) v.get(i2)));
    i2++;
    j++;
    }

    for(j = 0; j < n; j++)
    v.set(from + j, ((Appuntamento) b.get(j)));
    }

    public static void mergeSort(Vector v, int from, int to)
    {
    if(from == to) return;
    int mid = (from + to) / 2;
    mergeSort(v, from, mid);
    mergeSort(v, mid + 1, to);
    merge(v, from, mid, to);
    }
    }


    ed ecco la ricerca binaria:

    /**
    Verifica che non ci siano contrasti tra gli appuntamenti
    @param v il vettore da esaminare
    */

    public static int BinarySearch(Vector v, int gg, int mm, int oi, int of)
    {
    return Ricerca(v, 0, v.size() -1, gg, mm, oi, of);
    }

    /**
    Ricerca un appuntamento all'interno del vettore
    @param v il vettore da esaminare
    return l'indice del vettore corrispondente all'appuntamento
    */

    public static int Ricerca(Vector v, int from, int to, int gg, int mm, int oi, int of)
    {
    if (from == to || oi >= of)
    {
    return -1;
    }
    int mid = (from + to) / 2;
    int index = mid;
    int diffmm = ((Appuntamento) v.get(mid)).getMonth() - mm;

    if (diffmm < 0)
    {
    return Ricerca(v, mid +1, to, gg, mm, oi, of);
    }

    if (diffmm > 0)
    {
    return Ricerca(v, from, mid -1, gg, mm, oi, of);
    }

    if (diffmm == 0)
    {
    int diffgg = ((Appuntamento) v.get(mid)).getDay() - gg;
    if (diffgg < 0)
    {
    return Ricerca(v, mid +1, to, gg, mm, oi, of);
    }

    if (diffgg > 0)
    {
    return Ricerca(v, from, mid -1, gg, mm, oi, of);
    }

    if (diffgg == 0)
    {
    int diffoi = ((Appuntamento) v.get(mid)).getStart() - oi;
    if (diffoi > 0)
    {
    return Ricerca(v, from, mid -1, gg, mm, oi, of);
    }

    if (diffoi < 0)
    {
    return Ricerca(v, mid +1, to, gg, mm, oi, of);
    }

    if (diffoi == 0)
    {
    index = mid;
    }
    }
    }

    return index;
    }


    Credo comunque che se ti mandassi il file ci capiresti di più!
    Comunque grazie!
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    206
    infatti così non riesco a controllarlo molto , la mia mail è questa r.nicolazzo@eusysgrou.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    206
    oppsss il dominio è eusysgroup!!

  7. #7

    fatto!

    Ti ho inviato il tutto via email.

    Ti ringrazio infinitamente per la tua disponibilità!
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    206
    l'errore quando si ferifica? cosa devo fare per riprodurre l'errore?
    ho provato a fare un inserimento e sembra andar bene!!

  9. #9
    Prova ad effettuare più inserimenti (ne bastano 2) e vedrai che ti darà il messaggio di errore.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  10. #10
    che mi mandi il file anche a me? l'email è lancill@email.it
    4 occhi sono meglio di 2


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.