loops - ¿En java los tipos de datos enteros son aplicables en el bucle for each? - Stack Overflow en español
He buscado ejemplos para poder entender el bucle for each y la mayoría de ejemplos sólo muestran usando el tipo String por ejemplo declaran un array tipo String y luego usan el bucle for each.
Bien, el punto es que yo estoy viendo un curso en un vídeotutorial y me he quedado estancado porque no tengo una idea clara de entender bien esto, aquí dejo el código y mis dudas:
package PildorasInformaticas;
// uso de bucle for each para recorrer un bucle bidimensional
public class V26_Arrays_Bidimensional2 {
// declarar una matriz de dos dimensiones e incializa sus valores
{10,15,18,19,21},
{5,25,37,41,15},
{7,19,32,14,90},
{85,2,7,40,27}
for (int[] fila:matrix){
for (int z : fila){
System.out.printf("%02d ",z);
Es un array bidimensional de 4*5 elementos, mis dudas están cuando empieza a recorrer con el bucle for each , porqué declarar un array dentro del for(int[]) y porqué no solo usar el tipo de dato int sin necesidad de ([]) como cuando se recorre un array de tipo String, traté de borrar los ([]) y me sale un error que dice:
incompatible types: int[] cannot be converted to int. for-each not applicable cannot be to expression type.
java loops bucle-for
editada el 5 sep. 17 a las 7:23
formulada el 5 sep. 17 a las 6:51
Puedes mostrar el resultado que saca por pantalla el código sin el error? – Flowen el 5 sep. 17 a las 7:00
10 15 18 19 21 05 25 37 41 15 07 19 32 14 90 85 02 07 40 27 Process finished with exit code 0 – Vladimir Joel el 5 sep. 17 a las 7:04
Para comprender que pasa, tienes que ver sobre que objeto estás actuando. En tu caso, declaras una matriz formada por filas y columnas. Con este foreach recorres las filas:
for(int[] fila : matrix){...}
Y como bien has hecho, para acceder a los enteros, tienes que ir recorriendo la fila con
for(int z : fila){...}
¿Porqué pasa ésto? Es sencillo, tienes que ir paso a paso accediendo a los "objetos", en este caso arrays.
Un ejemplo es, si tienes un array de personas y quieres imprimir los nombres de sus hijos, no puedes hacerlo directamente, tienes que recorrer las personas y luego sus hijos para poder sacar el nombre, es lo mismo.
Si tuvieses un array de enteros simplemente (o un listado también lo puedes recorrer con un for each) con el segundo bucle valdría.
Cuando lo declaras así:
for(int z : matrix){...}
Da error porque matrix no está formada por enteros, está formada por arrays de enteros, por lo tanto, primero tienes que recorrer los array y luego recoger los enteros.
Espero que lo hayas entendido un poco mejor.
respondida el 5 sep. 17 a las 7:22
Buenas, En primer lugar tenemos una matriz declarada:
Esto significa que el array está compuesto por otros arrays. Para entrar a recorrer la matriz se usa el primer bucle:
for (int[] fila:matrix){}
En donde se representa una a una las filas del array matrix cuyo contenido es otro array, por ello se tiene que recuperar un array de ints: Ejemplo:
"Si tengo una saco que contiene bolsas de golosinas, para sacar una golosina del saco, primero tengo que sacar una bolsa que contiene esas golosinas"
Sé que no es el mejor ejemplo, pero es para entenderlo mejor. Lo que se está haciendo es recuperar una array de enteros dentro de ese array que contiene los arrays de enteros. Entonces, Dentro del primer bucle ya tenemos los arrays que contienen los enteros y empezamos a recorres cada uno de esos arrays en el segundo bucle (dentro del bucle anterior).
for (int z : fila){}
En este bucle cada fila contiene un entero
{10,15,18,19,21}, //<-- Esto es una fila
{5,25,37,41,15}, //<-- Esto es una fila
{7,19,32,14,90}, //<-- Esto es una fila
{85,2,7,40,27} //<-- Esto es una fila
Entonces en el bucle ya estaremos dentro de la "bolsa de golosinas" para recuperar cada uno de esos enteros
respondida el 5 sep. 17 a las 7:29
En el primer for está añadiendo a un array llamado fila cada línea del array multidimensional. En total meterá 4.
En el segundo for esta recorriendo cada una de las filas del array (tiene 4 filas y 5 valores en cada una) fila y está asignandolas en z. De tal modo, luego hace un print de z.
Todo esto se puede hacer del modo que tu estabas buscando del siguiente modo:
//for (int[] fila:matrix){
//for (int z : fila){
for (int z=0; z<matrix[i].length; z++){
System.out.printf("%02d ",matrix[i][z]);
editada el 5 sep. 17 a las 7:50
respondida el 5 sep. 17 a las 7:16
Una opinión personal, creo que sería mejor, cuando pones el "tope" de z en el bucle, debería ser z<matrix[i].length – Pablo Simon DiEstefano el 5 sep. 17 a las 7:24
Cierto, arreglado. – Flowen el 5 sep. 17 a las 7:51
¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta java loops bucle-for o formula tu propia pregunta.