2012-02-21 6 views
8

Aquí está mi código:bucle a través de los elementos de una matriz hacia atrás

int myArray[]={1,2,3,4,5,6,7,8}; 

for(int counter=myArray.length; counter > 0;counter--){ 
    System.out.println(myArray[counter]); 
} 

me gustaría imprimir la matriz en orden descendente, en lugar de orden ascendente (desde el último elemento de la matriz a la primera) pero me acaba de lanzar este error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8 
    at task1.main(task1.java:14) 

¿Por qué sucede esto? Tenía la esperanza de que al usar myArray.length para configurar el contador en 8, el código simplemente imprimiera el octavo elemento de la matriz y luego siguiera imprimiendo el anterior.

+0

No sé el estilo de indexación de matriz en Java, pero si es el mismo que en C, está intentando imprimir el elemento de matriz fuera de los límites de la matriz en la primera iteración. – Mallik

Respuesta

45

Arrays en Java son indexados de 0 a length - 1, no 1 a length, por lo que debe ser la variable de asignar en consecuencia y utilizar el operador de comparación adecuado.

Su bucle debe tener este aspecto:

for(int counter=myArray.length - 1; counter >= 0;counter--){ 
+0

Muchas gracias, funcionó genial – JimmyK

+0

Tuve esto, pero en lugar de quitar 1 del mostrador lo dejé tal como está. Buen trabajo. – James111

4
  • El primer índice es 0 y el último índice es 7 no 8
  • El tamaño de la matriz es 8
2

Usted Estamos comenzando en el índice equivocado. Hacerlo de esta manera:

for(int counter= myArray.length - 1; counter >= 0;counter--) { 

El último índice de un array es su longitud menos 1.

2

uso myArray.length-1

for(int counter=myArray.length-1; counter >= 0;counter--){ 
       System.out.println(myArray[counter]); 
      } 
3

El problema aquí es la siguiente trozo de código: myArray.length. En Java, como en la mayoría de los demás lenguajes, las estructuras de datos están basadas en 0, por lo que el último elemento tiene un índice de structure.length - 1 (y el primero es 0). Así, en su caso, debe cambiar su bucle de la siguiente manera:

for(int counter=myArray.length - 1; counter >= 0;counter--){ 
      System.out.println(myArray[counter]); 
     } 
2

el contador está empezando en el índice de myArray.length que en realidad se cuenta a partir de 1 en lugar de 0 ..

for(int counter=myArray.length - 1; counter > 0; counter--){ 
0

int myArray[]={1,2,3,4,5,6,7,8};

aquí, dado longitud de la matriz es de 8 como el recuento empieza con 1 pero viniendo para el índice myArray[0] = 1; y así sucesivamente .... aquí recuento índice comienza desde 0. así que en su pieza de código

for(int counter = myArray.length - 1; counter >= 0; counter--) { 

sale del límite de la matriz por lo que muestra ArrayIndexOutOfBoundsException.

Cuestiones relacionadas