entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Insertar datos en un array bidimensional en con un for Java

0

Tengo que rellenar un array bidimensional de [20][20] con datos por teclado. He mirado otros temas parecidos, pero no termino de entender ninguno, y me estoy desesperando porque no me sale una cosa que se que es simple, pero algo se me escapa.

Tengo esto:

public static void main(String[] args) throws IOException {
        InputStreamReader flujo = new InputStreamReader(System.in);
        BufferedReader teclado = new BufferedReader(flujo);

        String auxS = "";
        String elementos[][] = new String[2][2];

        for (int i = 0; i < elementos.length; i++) {
            for (int j = 0; j < elementos[i].length; j++) {
                System.out.println("Estado");
                auxS = teclado.readLine();
                elementos[i][j] = auxS;
                System.out.println("Elemento");
                auxS = teclado.readLine();
                elementos[i][j] = auxS;

            }
        }
        for( int x = 0; x<elementos.length;x++) {
            for( int z = 0; z<elementos.length;z++) {
                System.out.println("Estado "+elementos[x][z]);
                System.out.println("Elemento "+elementos[z][z]);
            }
        }
    }
}

Lo que necesito es tener [elemento][estado] [Agua][Liquido] asi 20x20. Esto me devuelve elemento->Agua estado->Agua. Mas que una solucion, quiero saber como voy elm est, elm est en el bucle.Gracias.

1 Respuesta

1voto

magarzon Puntos30650

Veamos a ver si lo he entendido.

Tú quieres una matriz, por ejemplo de 2 x 2, que sea algo así:

[0][0] Agua Líquido
[0][1] Agua Gaseoso
[1][0] Nitrógeno Líquido
[1][1] Nitrógeno Gaseoso

El primer problema en tu código es que estás poniendo el valor de estado y el valor de elemento exactamente en la misma posición del array [i][j], sin haber actualizado ninguno de los dos índices, por lo que por ejemplo en la primera iteración guardas en [0][0] primero el estado y luego lo machacas con el elemento.

El segundo fallo es que luego cuando recorres el array, estás recorriendo todos los elementos, sin diferenciar, porque además haces esa cosa rara del [z][z].

El tercer fallo es interpretar cada posición del array algo así como si fuera tridimensional, y no bidimensional. Es decir, en la posición [0][0] Solo vas a poder guardar un valor, que puede ser una cadena concatenada "Agua"+"Líquido". Si lo que quieres es tener una relación más unívoca, en lugar de un array bidimensional deberías usar un Map, en el que las claves fueran los elementos y los valores los estados (o viceversa)

El código correcto sería este (preguntando primero por elemento, y luego por estado, para que quede una matriz como el ejemplo que he puesto, ya que es más lógico):

public static void main(String[] args) throws IOException {
        InputStreamReader flujo = new InputStreamReader(System.in);
        BufferedReader teclado = new BufferedReader(flujo);

        String elemento = "";
        String estado = "";
        String elementos[][] = new String[2][2];

        for (int i = 0; i < elementos.length; i++) {
                System.out.println("Elemento "+i);
                elemento = teclado.readLine();
            for (int j = 0; j < elementos[i].length; j++) {
                System.out.println("Estado "+j);
                estado = teclado.readLine();
                elementos[i][j] = elemento+" "+estado;
            }
        }
        for( int x = 0; x<elementos.length;x++) {
            for( int z = 0; z<elementos.length;z++) {
                System.out.println("Estado/Elemento "+elementos[x][z]);
            }
        }
    }
}

Esto va a producir lo siguiente en pantalla (entre corchetes, entrada desde teclado)

Elemento 0: [Agua]
Estado 0: [Líquido]
Estado 1: [Gaseoso]
Elemento 1: [Nitrógeno]
Estado 0: [Líquido]
Estado 1: [Gaseoso]

Agua Líquido
Agua Gaseoso
Nitrógeno Líquido
Nitrógeno Gaseoso

1voto

cupax comentado

Muchas gracias, sabia que no era dificil, pero nunca habia trabajado con arrays bidimensionales, siempre con arrays de unica posicion, listas, etc.

Gracias.

0voto

Peter comentado

@cupax si la respuesta soluciona tu pregunta, por favor selecciónala como correcta.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta