inversează bucla pentru numărătoarea inversă pentru matrice (Programare, Java, Array-Uri, Pentru Buclă, Reverse)

KamikazeStyle a intrebat.

Primesc eroarea…

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at Reverse.main(Reverse.java:20). 

Nu este nimic greșit în sintaxă, așa că nu sunt sigur de ce atunci când se compilează primește o eroare?

public class Reverse {

public static void main(String [] args){
    int i, j;


    System.out.print("Countdown
");

    int[] numIndex = new int[10]; // array with 10 elements.

    for (i = 0; i<11 ; i++) {
        numIndex[i] = i;// element i = number of iterations (index 0=0, 1=1, ect.)
    }

    for (j=10; j>=0; j--){ // could have used i, doesn't matter.
        System.out.println(numIndex[j]);//indexes should print in reverse order from here but it throws an exception?
    }
}

}

Comentarii

  • array-ul are 10 elemente. iterați de la 0 la 10, adică 11! ceea ce cauzează eroarea de index out of bounds. Ar trebui să folosiți numIndex.length pe viitor pentru a preveni acest tip de numere arbitrare.  > Por greedybuddha.
  • ah dreapta din nou domnule haha. Mulțumesc @greedybuddah – tip nou –  > Por KamikazeStyle.
4 răspunsuri
rolfl

Java folosește indexuri de matrice bazate pe 0. Când creați o matrice de dimensiune 10 new int[10] se creează 10 „celule” întregi în array. Indicii sunt: 0, 1, 2, …., 8, 9.

Bucla dvs. numără până la indexul care este cu 1 mai mic decât 11, sau 10, iar acel index nu există.

abhishekkannojia

Ați declarat un array pe numere întregi de 10 elements. Și iterați de la i=0 to i=10 și i=10 to i=0 care este 11 elements. Evident, este un index out of bounds error.

Schimbați-vă codul în acest mod

public class Reverse {

  public static void main(String [] args){
    int i, j;

    System.out.print("Countdown
");

    int[] numIndex = new int[10]; // array with 10 elements.

    for (i = 0; i<10 ; i++) {  // from 0 to 9
      numIndex[i] = i;// element i = number of iterations (index 0=0, 1=1, ect.)
    }

    for (j=9; j>=0; j--){ // from 9 to 0
      System.out.println(numIndex[j]);//indexes should print in reverse order from here but it throws an exception?   
    } 

  }
}

Amintiți-vă că indicii încep de la 0.

.

Yuushi

Matricea are dimensiunea 10, ceea ce înseamnă că este indexabilă de la 0 la 9. numIndex[10] este într-adevăr în afara limitelor. Aceasta este o eroare de bază de tip off-by-one.

Craig

Un Array în java care are 10 elemente merge de la 0 la 9. Deci buclele tale trebuie să acopere acest interval. În momentul de față mergeți de la 0 la 10, și 10 la 0.