Errore in array

di il
7 risposte

Errore in array

Ciao a tutti, ho un array completo, e e scritto almeno a quanto pare correttamente, ma quando lo eseguo mi da questo errore:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at ArrayIrregolare.main(ArrayIrregolare.java:17)
non riesco a capire dove è il mio errore. Posto il codice. Grazie a tutti.


class ArrayIrregolare {
public static void main(String[] args) {
int array2D [][]=new int[4][];
array2D [0]=new int[1];
array2D [1]=new int[2];
array2D [2]=new int[3];
array2D [3]=new int[4];
int i,j=0;
int k=0;
for (i=0;i<array2D.length;i++) {
for (j=0;j<i+1;j++){
array2D [j]=k;
k++;
}
}
System.out.print(array2D [j]+" ");
System.out.println();
}
}

7 Risposte

  • Re: Errore in array

    Gli indici partono da 0 e arrivano a length -1.
    Se ho ben capito cosa devi fare i<array2D.length diventa i<array2D.length -1 e j<i+1 diventa j<i
  • Re: Errore in array

    Ciao jam3s82, cosi come dici tu, mi stampa 0 a video, che non è quello che io voglio!
    Io dovrei stampare questo:
    0
    1 2
    3 4 5
    6 7 8 9

    anche se sostituisco nel ciclo for:
    for(i=0;i<4;i++) {
    for(j=0;j<i+1;j++) {
    ecc
    l'errore è sempre lo stesso.

    Grazie.
  • Re: Errore in array

    L'errore indexOutOfBound è perchè accedi ad un indice dell'array che non esiste (quindi devi mettere i<4 e j<1) e poi il SystemOut deve stare nel ciclo for, sennò stampa solo una riga! se ti stampa 0 però vuol dire che non è proprio entrato nel ciclo for: in effetti quell' array.length non so che valore potrebbe avere per un array bidimensionale... probabilmente vale sempre 0 (per cui io metterei i<4) e il System.out all'interno del primo ciclo for e fuori dal secondo:
    
    for(...){
       for(...){
          ...
       }
       System.out(...)
    }
    
  • Re: Errore in array

    Anche cosi scritto, come mi consigli, genera lo stesso tipo di errore! Cambia solo il numero:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    at ArrayIrregolare.main(ArrayIrregolare.java:16)

    class ArrayIrregolare {
    public static void main(String[] args) {
    int array2D [][]=new int[4][];
    array2D [0]=new int[1];
    array2D [1]=new int[2];
    array2D [2]=new int[3];
    array2D [3]=new int[4];
    int i,j=0;
    int k=0;
    for (i=0;i<4;i++) {
    for (j=0;j<1;j++){
    array2D [j]=k;
    k++;
    }
    System.out.print(array2D [j]+" ");
    System.out.println();
    }
    }
    }
  • Re: Errore in array

    Sorry, sul ciclo interno volevo scrivere j<i; poi effettivamente ripensandoci la prima system.out va all'interno anche del secondo ciclo e quella che fa il ritorno a capo solo nel primo(i numeri li devi scriver tutti, e i ritorni a capo uno per riga):
    
    for(...){
       for(...){
          ...
          System.out.print(...)
       }
       System.out.println(...)
    }
    
  • Re: Errore in array

    In alternativa si puo usare anche la variabile length degli array pero in modo piu' ampio.
    nel tuo caso
    
    System.out.println( array2d.length ); // stampa il numero delle righe nel tuo caso sono 4
    
    System.out.println( array2d[0].length );
    System.out.println( array2d[1].length );
    System.out.println( array2d[2].length );
    System.out.println( array2d[3].length );
    // in questo modo invece stamperai il numero di elemente che ha chiascun array della righa e lo puoi usare tranquillamente nel tuo test del ciclo interno j < array[i].length
    
  • Re: Errore in array

    Ragazzi vi ringrazio, ma nessuno dei vostri consigli mi ha permesso di far "funzionare" questo programmino come avevo scritto sopra, ovvero:
    0
    1 2
    3 4 5
    6 7 8 9

    Ps: risolto spostando il System.out.println fuori dal ciclo for.
Devi accedere o registrarti per scrivere nel forum
7 risposte