Java - Problema con la sentencia switch en ejercicio. JAVA

 
Vista:
Imágen de perfil de Omi
Val: 11
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Problema con la sentencia switch en ejercicio. JAVA

Publicado por Omi (6 intervenciones) el 26/05/2020 23:32:38
Hola, tengo un error en una serie de Switch en java. En mi ejercicio debo hacer una matriz 4x4 llenada con números aleatorios y luego preguntar al usuario si quiere agregar o eliminar alguna fila o columna, el problema que tengo yace que se me relaciona un switch con otro.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
public static void main(String[] args) {
    //Inicialización de variables
    int[][] matriz = new int [4][4];
    String decision, decision2, decision3;
    int nuevaFila, nuevaColumna, filaQuitar;
    Scanner input = new Scanner(System.in);
 
    //Inicialización de la matriz 4x4 con números aleatorios del 1 al 9
    System.out.println("MATRIZ");
    for (int filas = 0; filas < 4; filas++) {
        System.out.println("");
        for (int columnas = 0; columnas < 4; columnas++) {
            matriz[filas][columnas] = (int) (Math.random() *9+1);
            System.out.print(matriz[filas][columnas] + "\t");
        }
    }
 
    System.out.print("\n¿Desea agregar una fila nueva? ");
    decision = input.nextLine();
 
    switch (decision){
        case "si":
            System.out.print("¿En qué posición (fila) desea insertar esta nueva fila?: ");
            nuevaFila = input.nextInt();
            for (int k = 0; k < 4; k++) {
                System.out.print("Inserte el elemento " + "[" + nuevaFila + "," + k + "]: ");
                matriz[nuevaFila][k] = input.nextInt();
            } System.out.println();
 
            System.out.println("Nueva Matriz");
            for (int filas = 0; filas < 4; filas++) {
                System.out.println();
                for (int columnas = 0; columnas < 4; columnas++) {
                    System.out.print(matriz[filas][columnas] + "\t");
                }
            }
 
            break;
 
        case "no":
            System.out.println("Ok");
            break;
 
        default:
            System.out.println("Ingrese una opción correcta");
            break;
    }//Fin de decisión fila
 
 
    System.out.print("\n¿Desea agregar una nueva columna?: ");
    decision2= input.nextLine();
 
    switch(decision2){
        case "si":
            System.out.print("¿En qué posición desea agregar la nueva columna?: ");
            nuevaColumna= input.nextInt();
            for (int i = 0; i < 4; i++) {
                System.out.print("Inserte el elemento " + "[" + i + "," + nuevaColumna + "]: ");
                matriz[i][nuevaColumna] = input.nextInt();
            }
 
            for (int filas = 0; filas < 4; filas++) {
                System.out.println();
                for (int columnas = 0; columnas < 4; columnas++) {
                    System.out.print(matriz[filas][columnas] + "\t");
                }
            }
            break;
 
        case "no":
            System.out.println("Ok");
            break;
 
        default:
            System.out.println("Ingrese una opción correcta");
            break;
    } //fin de decisión columna
 
 
    System.out.print("\n¿Desea eliminar alguna fila?: ");
    decision3= input.nextLine();
 
    switch(decision3){
        case "si":
            System.out.print("\n¿Cuál fila desea eliminar?: ");
            filaQuitar = input.nextInt();
 
            //Hacemos una nueva matriz copiando los valores de la original y movemos la fila elegida
            int[][] nuevaMatriz = new int[matriz.length - 1][matriz[0].length];
 
            for (int filas = 0; filas < nuevaMatriz.length; filas++) {
                for (int columnas = 0; columnas < nuevaMatriz[0].length; columnas++) {
                    if (filas >= filaQuitar) {
                       nuevaMatriz[filas][columnas] = matriz[filas+1][columnas];
                    } else{
                        nuevaMatriz[filas][columnas] = matriz[filas][columnas];
                    }
                }
            }
 
            //Imprimir la nueva matriz sin la fila elegida
            System.out.print("\nNueva Matriz");
            for (int filas = 0; filas < nuevaMatriz.length; filas++) {
                System.out.println();
                for (int columnas = 0; columnas < nuevaMatriz[0].length; columnas++) {
                    System.out.print(nuevaMatriz[filas][columnas] + "\t");
                }
            }
            break;
 
        case "no":
            System.out.println("Ok");
            break;
 
        default:
            System.out.println("Ingrese una opción correcta");
            break;
    }//fin de decisión quitar fila
 
}//main



error

Como se ve en la imagen, luego de yo agregar una fila si quisiera agregar una nueva columna no podría ya que se me relacionan las respuestas de un switch con el otro. Estoy poniendo correctamente los break; luego de cada case. Así que no puedo localizar el problema.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con la sentencia switch en ejercicio. JAVA

Publicado por Kabuto (1379 intervenciones) el 27/05/2020 17:31:47
Hola.
Es posible que el problema se deba a por las lectura de enteros con :

1
input.nextInt();

Es un problema habitual. En un programa, tras leer un valor numérico con nextInt(), nextFloat(), nextDouble(),... la siguiente lectura que queramos hacer con nextLine() fallará.

Esto se debe a que la clase Scanner cuando le tecleamos valores numéricos, coge los números tecleados (que es lo que necesita) pero no recoge el carácter "retorno de carro" que producimos cuando pulsamos la tecla enter al introducir los números.

Ese "retorno de carro" no desaparece, se queda en memoria y si luego llamamos a nextLine(), quien SÍ recoge este carácter para crear un String, se encuentra que hay un "retorno de carro" en memoria y erróneamente piensa que hemos pulsado la tecla enter para darle una "cadena vacía".

En fin, para evitarlo, sustituye TODAS las lecturas con:
1
input.nextInt();

Por esta línea:
1
Integer.parseInt(input.nextLine());

Con esa línea consigues un valor entero, y además evitamos dejar "retornos de carro" en memoria.


No se si es este el problema de tu código, pero que esto que explicado da problemas SIEMPRE puedes estar seguro.
Haz los cambios que recomiendo y vuelve a probar, a ver si ahora funciona correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Omi
Val: 11
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Problema con la sentencia switch en ejercicio. JAVA

Publicado por Omi (6 intervenciones) el 27/05/2020 23:40:14
El error sigue persistiendo así que creo que en vez de usar la sentencia switch voy a utilizar if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con la sentencia switch en ejercicio. JAVA

Publicado por Kabuto (1379 intervenciones) el 29/05/2020 17:45:53
Pues creo que a mí si me está funcionado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
MATRIZ
 
4	1	7	4
7	4	2	4
7	7	7	4
2	6	5	5
¿Desea agregar una fila nueva? si
¿En qué posición (fila) desea insertar esta nueva fila?: 0
Inserte el elemento [0,0]: 3
Inserte el elemento [0,1]: 3
Inserte el elemento [0,2]: 3
Inserte el elemento [0,3]: 3
 
Nueva Matriz
 
3	3	3	3
7	4	2	4
7	7	7	4
2	6	5	5
¿Desea agregar una nueva columna?: si
¿En qué posición desea agregar la nueva columna?: 1
Inserte el elemento [0,1]: 1
Inserte el elemento [1,1]: 1
Inserte el elemento [2,1]: 1
Inserte el elemento [3,1]: 1
 
3	1	3	3
7	1	2	4
7	1	7	4
2	1	5	5
¿Desea eliminar alguna fila?: si
 
¿Cuál fila desea eliminar?: 1
 
Nueva Matriz
3	1	3	3
7	1	7	4
2	1	5	5

Solo he cambiado lo mencionado, los nextInt() por nextLine() con parseo a Integer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
public static void main(String[] args) {
		//Inicialización de variables
		int[][] matriz = new int [4][4];
		String decision, decision2, decision3;
		int nuevaFila, nuevaColumna, filaQuitar;
		Scanner input = new Scanner(System.in);
 
		//Inicialización de la matriz 4x4 con números aleatorios del 1 al 9
		System.out.println("MATRIZ");
		for (int filas = 0; filas < 4; filas++) {
			System.out.println("");
			for (int columnas = 0; columnas < 4; columnas++) {
				matriz[filas][columnas] = (int) (Math.random() *9+1);
				System.out.print(matriz[filas][columnas] + "\t");
			}
		}
 
		System.out.print("\n¿Desea agregar una fila nueva? ");
		decision = input.nextLine();
 
		switch (decision){
		case "si":
			System.out.print("¿En qué posición (fila) desea insertar esta nueva fila?: ");
			nuevaFila = Integer.parseInt(input.nextLine());
			for (int k = 0; k < 4; k++) {
				System.out.print("Inserte el elemento " + "[" + nuevaFila + "," + k + "]: ");
				matriz[nuevaFila][k] = Integer.parseInt(input.nextLine());
			} System.out.println();
 
			System.out.println("Nueva Matriz");
			for (int filas = 0; filas < 4; filas++) {
				System.out.println();
				for (int columnas = 0; columnas < 4; columnas++) {
					System.out.print(matriz[filas][columnas] + "\t");
				}
			}
 
			break;
 
		case "no":
			System.out.println("Ok");
			break;
 
		default:
			System.out.println("Ingrese una opción correcta");
			break;
		}//Fin de decisión fila
 
 
		System.out.print("\n¿Desea agregar una nueva columna?: ");
		decision2= input.nextLine();
 
		switch(decision2){
		case "si":
			System.out.print("¿En qué posición desea agregar la nueva columna?: ");
			nuevaColumna= Integer.parseInt(input.nextLine());
			for (int i = 0; i < 4; i++) {
				System.out.print("Inserte el elemento " + "[" + i + "," + nuevaColumna + "]: ");
				matriz[i][nuevaColumna] = Integer.parseInt(input.nextLine());
			}
 
			for (int filas = 0; filas < 4; filas++) {
				System.out.println();
				for (int columnas = 0; columnas < 4; columnas++) {
					System.out.print(matriz[filas][columnas] + "\t");
				}
			}
			break;
 
		case "no":
			System.out.println("Ok");
			break;
 
		default:
			System.out.println("Ingrese una opción correcta");
			break;
		} //fin de decisión columna
 
 
		System.out.print("\n¿Desea eliminar alguna fila?: ");
		decision3= input.nextLine();
 
		switch(decision3){
		case "si":
			System.out.print("\n¿Cuál fila desea eliminar?: ");
			filaQuitar = Integer.parseInt(input.nextLine());
 
			//Hacemos una nueva matriz copiando los valores de la original y movemos la fila elegida
			int[][] nuevaMatriz = new int[matriz.length - 1][matriz[0].length];
 
			for (int filas = 0; filas < nuevaMatriz.length; filas++) {
				for (int columnas = 0; columnas < nuevaMatriz[0].length; columnas++) {
					if (filas >= filaQuitar) {
						nuevaMatriz[filas][columnas] = matriz[filas+1][columnas];
					} else{
						nuevaMatriz[filas][columnas] = matriz[filas][columnas];
					}
				}
			}
 
			//Imprimir la nueva matriz sin la fila elegida
			System.out.print("\nNueva Matriz");
			for (int filas = 0; filas < nuevaMatriz.length; filas++) {
				System.out.println();
				for (int columnas = 0; columnas < nuevaMatriz[0].length; columnas++) {
					System.out.print(nuevaMatriz[filas][columnas] + "\t");
				}
			}
			break;
 
		case "no":
			System.out.println("Ok");
			break;
 
		default:
			System.out.println("Ingrese una opción correcta");
			break;
		}//fin de decisión quitar fila
 
	}//main
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar