Cómo recorrer arrays en Java

Home >> Programación >> Java



En un artículo anterior te hablé de los arrays en Java: qué es un array, cómo se declara un array, cómo se inicializa, etc.

En este artículo voy a continuar y te voy a explicar cómo recorrer o iterar arrays en Java. Hay varias formas de hacerlo: puedes recorrer un array en Java con un bucle for, también puedes hacerlo con un bucle while o puedes hacerlo con un for-each.

Sigue leyendo que te voy a explicar las tres formas de recorrer arrays en Java:

Cómo recorrer un array con un for

Empecemos por el primer caso, que es posiblemente el caso más común. Te voy a explicar cómo recorrer arrays en Java utilizando un bucle for.

Es facilísimo, la clave aquí está en los índices.

Para este ejemplo voy a utilizar este array:

array java en memoria

Para que te resulte más sencillo utilizaré su representación horizontal:

array java horizontal

Lo primero de todo es declarar el array. Si leíste mi artículo anterior sabrás como hacerlo 😉. De todos modos te lo dejo aquí:

int [] numbers = {5, 3, 9, 2, 8};

Acceder a cada elemento del array es sencillo si utilizas índices, pero si quieres acceder a todos los elementos es muy engorroso y ya ni te cuento si el array tuviese cientos de datos. Para automatizar este proceso y que resulte más cómo, incluso con arrays de muchos elementos, lo mejor es combinar el uso de indices con un bucle for.

Mira este código:

for (int i=0; i<numbers.length; i++){
    System.out.println(numbers[i]);
}

Vamos a analizar el código por partes.

Primero fíjate en el for. Te habrás dado cuenta que utilizo como condición i<numbers.length. ¿Qué es esto? Por un lado, numbers es el array que declaramos antes, y por otro lado length es un atributo del array que devuelve el número de elementos que tiene este, es decir, su longitud o dimensión.

En el ejemplo el array tiene 5 elementos, por tanto length devuelve 5. Java interpreta la condición como i<5. ¿Tiene sentido hacer esto? Si, porque el objetivo es acceder a los 5 elementos y con esta condición el for se repite 5 veces puesto que i comienza con valor 0. En cada una de esas repeticiones accederemos a un elemento.

¿Por qué usar length si directamente puedo poner i<5? Piensa esto, si el array tuviese otra dimensión diferente a 5 funcionaría igual porque length siempre devuelve el número de elementos correcto. Debes intentar programar siempre de la forma más genérica posible.

¿Está claro como funciona el for? Vamos a ver ahora qué ocurre en cada iteración del bucle. La instrucción que se ejecuta por cada repetición es esta: System.out.println(numbers[i]).

Lo interesante de esa instrucción es numbers[i]. Fíjate que estoy utilizando como índice del array la variable i del for.

En la primera iteración del for la variable i tiene valor 0, que es justo el índice correspondiente al primer elemento del array:

primera posición de un array

Sería lo mismo que hacer System.out.println(numbers[0]).

El for continua con la siguiente iteración (i++) y el valor de i pasa a valer 1. Recuerda que a la segunda posición del array le corresponde el índice 1, por tanto System.out.println(numbers[i]) muestra lo que hay en esa posición :

segunda posición de un array

El bucle seguirá iterando e incrementando el valor de i en cada nueva repetición: 2, 3 y 4. De esta forma usando i accederás a cada posición del array de forma automática.

¿Qué ocurre cuando i alcanza el valor devuelto por length (5 en el ejemplo)? Pues que la condición i<numbers.length será false y el bucle se detendrá. Si no fuese así se produciría un error porque el índice 5 no existe en este array. Recuerda siempre esto y utiliza el operador < para la condición del for, de esta forma evitarás acceder a posiciones ilegales.

Cómo recorrer un array con un for-each

Vamos a por la segunda forma de recorrer el array. En esta ocasión también voy a utilizar un for, pero de una forma un poco diferente. Es lo que se conoce como for-each. Si nunca has oído hablar de for-each en Java no te preocupes que ahora mismo te lo explico.

De nuevo voy a utilizar el array del apartado anterior:

int [] numbers = {5, 3, 9, 2, 8};

En esta ocasión no voy a utilizar los índices para acceder a los elementos del array, voy a dejar que sea el propio for el que se encargue de eso. Mira el siguiente código:

for (int n : numbers){
    System.out.println(n);
}

Fíjate bien cómo está construido este for porque ahí está la clave: int n : numbers.

La variable numbers es el array y la variable n es un entero que toma el valor de un elemento del array en cada iteración. En este caso el array es de tipo int, por eso la variable n también lo es. Si el array almacenase datos de tipo float esta variable también tendría que ser de ese tipo. Siempre debe coincidir el tipo de esta variable con el tipo del array.

Veamos paso a paso cómo funciona. En la primera iteración del bucle n tomará el valor del elemento que ocupa la posición 0 (es decir, 5):

variable n en for-each

En la segunda iteración n tomará el valor del elemento que ocupa la posición 1 (3 en este caso):

variable n segundo elemento for-each

Y así sucesivamente hasta recorrer el array completo.

Como puedes ver no es necesario definir ninguna condición de parada, el for-each sabe perfectamente cuando terminar indistintamente de la dimensión que tenga el array.

Pruébalo y verás que recorre todos los elementos del array y los imprime uno a uno.

Cómo recorrer un array con un while

Vamos a por la tercera opción. Usar un bucle while para recorrer el array. Personalmente no es mi opción favorita cuando se trata de recorrer el array entero, pero es otra forma de hacerlo.

Básicamente consiste en simular el comportamiento del bucle for con índices utilizando un bucle while.

Veamos cómo hacerlo:

int [] numbers = {5, 3, 9, 2, 8};
      
int i=0;
while (i<numbers.length){
    System.out.println(numbers[i]);
    i++;
}

Lo primero que debes hacer es inicilializar la variable que usarás como indice a 0: int i=0.

Recuerda que el primer elemento del array está en la posición 0, por eso debe tomar valor 0 al comenzar.

Fíjate en la condición del while: i<numbers.length. Es exactamente la misma que usamos anteriormente en el bucle for. Si lo piensas bien tiene sentido porque lo que buscamos es que el bucle se repita mientras no hayamos alcanzado el final del array. Por tanto, mientras i sea menor que el número de elementos del array el bucle se repetirá.

Ahora vamos a analizar lo que ocurre en cada repetición del bucle. La primera instrucción (System.out.println(numbers[i])) imprime lo que hay en la posición i del array. En la primera iteración del bucle la variable i vale 0, por tanto imprime un 5, que es el dato que ocupa la posición 0:

posición 0 array java

La idea es que en la siguiente iteración se imprima lo que hay en la siguiente posición del array, es decir en la 1. Para eso debes conseguir que i incremente su valor ¿Cómo? Pues muy fácil, utilizando el operador de incremento. Por eso la siguiente instrucción que se ejecuta dentro del cuerpo del bucle es i++.

Una vez i se incrementa el while vuelve a evaluar la condición i<numbers.length (1<5). Como sigue siendo cierta se ejecuta una nueva iteración. En este caso se imprime por pantalla el dato que se encuentra en la posición 1:

posición 1 array java

¿Cuándo finaliza el bucle? Cuando i tenga el mismo valor que devuelve length, es decir 5. En ese momento la condición dejará de ser cierta y el bucle while finalizará evitando que se acceda a indices ilegales del array.

¿Y si te olvidas de incrementar la i? Pues tendrías un bucle infinito. Si te olvidas de incluir i++ al final del bucle el valor de i jamás cambiará y siempre será 0, por lo que la condición que evalúa el while siempre será true y no se detendrá nunca. Mucho cuidado con esto.

Como puedes ver la lógica es la misma que la del for con índice.

Ahora prueba las tres formas de recorrer un array en Java que te he contado y elige la que prefieras.

Comments are closed.

Up ↑