COME INGRANDIRE UN VETTORE

di il
3 risposte

COME INGRANDIRE UN VETTORE

Ho fatto così vorrei ingrandire il vettore partite[] di uno se arrivo alla fine del vettore e quindi non c'è più spazio ma continua a darmi java.lang.ArrayIndexOutOfBoundsException quindi effettivamente non funziona HELP
 private void acquisizionePartite() throws IOException {
        Lettore l = new LettoreBinario("dati//PartiteBinario.dat");
        Partita p = new Partita();
        int i=0;
        while(!l.isEof()){
            if(i>nPartite)
                incrementaVettore();
            Object obj = l.nextRecord();
            p = (Partita) obj;
            partite[i]=p;
            i++;
            nPartite++;
        }
        l.close();        
    }

    private void incrementaVettore(){
        Partita[] appo= new Partita[nPartite+1];
        System.arraycopy(partite, 0, appo, 0, nPartite);
        partite=appo;

    }

3 Risposte

  • Re: COME INGRANDIRE UN VETTORE

    andreazzzzzz ha scritto:


    continua a darmi java.lang.ArrayIndexOutOfBoundsException
    "a naso", potrebbe esserci una discrepanza tra il i (che è locale) e nPartite (che è sicuramente di durata più ampia).
    Ma non servono 2 indici, ne basta uno! E se si inserisce e incrementa sempre e solo di 1 al fondo, non serve nemmeno una variabile di indice ... basta la lunghezza dell'array in sé. arr.length è la lunghezza attuale ma anche l'indice del prossimo elemento da inserire. Tutto qui.
  • Re: COME INGRANDIRE UN VETTORE

    Quindi come verrebbe fuori il codice che non ho capito bene?
  • Re: COME INGRANDIRE UN VETTORE

    Super-abbozzato ....
    public class XXXXX {
        private Partita[] partite = new Partita[0];
    
    
        private void acquisizionePartite() throws IOException {
            // ....
    
            while (......) {
                Partita partita = //letto da ....
    
                aggiungiPartita(partita);
            }
    
            // ....
        }
    
    
        private void aggiungiPartita(Partita partita) {
            int len = partite.length;
            Partita[] partiteNew = new Partita[len+1];
            System.arraycopy(partite, 0, partiteNew, 0, len);
            partiteNew[len] = partita;
            partite = partiteNew;
        }
    }
Devi accedere o registrarti per scrivere nel forum
3 risposte