[ Foro de Java ]

Problema con vector bidimensional[Java]

20-Jan-2018 16:18
Invitado (Java3904)
5 Respuestas

El código es el siguiente:


import java.util.Scanner;

public class practica_dos {

	public static void main(String[] args) {
		String[][] vector = new String[2][3];
		String[] fila = new String[3];
		Scanner teclado = new Scanner(System.in);
		int cuentaPalabras = 0;
		int cuentaFilas = 0;
		for (int i = 0; i < 6; i++) {
			System.out.print("Escribe una palabra: ");
			String palabra = teclado.nextLine();
			fila[cuentaPalabras] = palabra;
			cuentaPalabras += 1;
			if (cuentaPalabras == 3) {
				vector[cuentaFilas] = fila;
				cuentaPalabras = 0;
				cuentaFilas += 1;
			}

		}

		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(vector[i][j]);
			}
			System.out.println();
		}
	}
}



Si escribo las seis palabras "a", "b" ,"c" ,"d", "e", "f"; deberia mostrarse en la consola:
"abc"
"def"
pero aparece:
"def"
"def"
No entiendo por qu?.


22-Jan-2018 04:26
Invitado (Java3904)

Ya logré solucionarlo


if (cuentaPalabras == 3) { 
vector[cuentaFilas] = fila; 
cuentaPalabras = 0; 
cuentaFilas += 1; 
//Acá debia agregar:
fila = new String[3]
}


Sigo sin entender el por qué, si alguien sabe.


24-Jan-2018 23:59
Nacho Cabanes (+83)

Es que tu planteamiento es un poco enrevesado. Si la petición de datos la hicieras también con un "doble for" (en vez de un único "for" de 0 a 6), igual que cuando los muestras, todo sería más natural y más fácil de seguir...


25-Jan-2018 19:25
Invitado (Java3904)

 


for (int i = 0; i < 2; i++) {
			fila = new String[3];
			for (int j = 0; j < 3; j++) {
				System.out.print("Escribe una palabra: ");
				String palabra = teclado.nextLine();
				fila[cuentaPalabras] = palabra;
				cuentaPalabras += 1;
			}
			vector[cuentaFilas] = fila;
			cuentaPalabras = 0;
			cuentaFilas += 1;

		}


ahora que queda más ordenado, pregunto, por qué se debe crear una nueva fila?
¿no podrían modificarse los datos desde [null,null,null] hasta, por ejemplo, ser ["a", "b", "c"] y luego paulatinamente cambiar a ["e","f","d"]? porque cuando lo imprimia en el grid bidimensional ambas filas se almacenaban como ["d", "e", "f"], si hubiera otra iteracion en el bucle de i, todos los valores cambiarian a ["g", "h", "i"]. Entonces la pregunta es, por qué sucede esto?


25-Jan-2018 19:54
Invitado (Java3904)

Me equivoqué se ve mejor eliminando unas cuantas lineas y para este problema, no se requiere de un vector exclusivo al cual llamé fila


		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print("Escribe una palabra: ");
				vector[i][j] = teclado.nextLine();

			}

		}


sin embargo, en el programa verdadero lo que hago es capturar el texto de un jtextfield cada vez que aprieto un boton llamado "siguiente", se va almacenando las palabras en un vector llamado fila, y cuando se aprieta 3 veces el boton siguiente el vector de fila pasa sus valores a el vector bidimensional y la fila almacena otros 3 datos mas, para guardarlos en el vector

no veo manera de aplicar un bucle for anidado siendo que se captura el texto cada vez que aprieto el boton siguiente,


btnSiguiente2.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		//obtiene cadena de jtext
		cad = text2.getText();
		fila[cuenta] = cad;
		//lo vacia
		text2.setText("");
		cuentapalabras += 1;
		
		//en el ejemplo son 3 elementos
		if (cuentapalabras == numElementos) {
			
			//se almacenan los datos de la fila
			vector[cuenta2]= fila;

			cuentapalabras = 0;
			cuentafilas += 1;
			
			//esto es lo que debia agregar para que funcionase
			fila = new String[numElementos];
		} 
	}
});


 


25-Jan-2018 20:23
Invitado (Java3904)

Ya encontré una manera de almacenar los datos en un vector tridimensional con los bucles for anidados que dices. Gracias por tomarte un segundo en chequear el codigo






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)