Problema con switch

Iniciado por MrSimpatia, 5 Octubre 2018, 21:04 PM

0 Miembros y 1 Visitante están viendo este tema.

MrSimpatia

Buenas tengo un problema con un switch
Código (java) [Seleccionar]
[code]public void Vehiculos () {
int op1, n;
String busca, busca2;
String matricula [] = new String [0];
String marca [] = new String [0];
String modelo [] = new String [0];
String color [] = new String [0];
String cantPuertas [] = new String [0];
do {
System.out.println("1.1- Registrar");
System.out.println("1.2- Modificar");
System.out.println("1.3- Eliminar");
System.out.println("1.4- Listar todos");
System.out.println("1.5- Buscar");
System.out.println("0- Volver");
System.out.print("Opcion: ");
op1 = dato.nextInt();
switch (op1) {
case 1:
System.out.print("Cuantos vehiculos desea registrar? ");
n = dato.nextInt();
matricula = new String [n];
marca = new String [n];
modelo = new String [n];
color = new String [n];
cantPuertas = new String [n];

for (int f= 0; f<n ; f++) {
dato.nextLine();
System.out.print("Matricula: ");
matricula [f] = dato.nextLine();
System.out.print("Marca: ");
marca [f] = dato.nextLine();
System.out.print("Modelo: ");
modelo [f] = dato.nextLine();
System.out.print("Color: ");
color [f] = dato.nextLine();
System.out.print("Cantidad de puertas: ");
cantPuertas [f] = dato.next(); }
break;

case 2:

break;

case 3:
System.out.println("Cual desea eliminar? ");
busca2 = dato.nextLine();
for (int f= 0; f<matricula.length; f++) {
if (busca2.equals(matricula [f])) {
matricula [f] = null;
modelo [f] = null;
color [f] = null;
marca [f] = null;
cantPuertas [f] = null;
}

}
for (int f= 0; f<matricula.length; f++) {
System.out.println("Matricula: "+matricula[f]+" Marca: "+marca[f]+" Modelo: "+modelo[f]+" Color: "+color[f]+" Cantidad de puertas: "+cantPuertas[f]);
}


break;

case 4:
System.out.println("Listado de vehiculos:");
System.out.println("-----------------------------");
for (int f= 0; f<matricula.length; f++) {
System.out.println("Matricula: "+matricula[f]+" Marca: "+marca[f]+" Modelo: "+modelo[f]+" Color: "+color[f]+" Cantidad de puertas: "+cantPuertas[f]);
System.out.println(" ");
System.out.println(" ");
}
break;

case 5:
System.out.println("Matricula del vehiculo que desea buscar: ");
busca = dato.next();
for (int x = 0; x<matricula.length; x++) {
if (busca.equals(matricula [x])) {
System.out.println("Matricula: "+matricula[x]+" Modelo: "+modelo[x]+" Color: "+color[x]+" Cantidad de puertas: "+cantPuertas[x]);
System.out.println("El vehiculo se encuentra en la posicion "+(x+1));
}
}
break;

case 0:
MenuPrincipal();
}

}while (op1 != 0);


Cuando quiero usar el case 3 , me vuelve a lanzar el menu principal, las demas opciones funcionan bien, solo esa me da error
PD: No dar importancia a el case 2 (Aunque si quieren darme una idea de como hacer para modificar un array seria de gran ayuda :D) [/code]

OmarHack

Cambia el break del case 3: por un prinrf que ponga algo en pantalla y mira a ver si se imprime.
Si se imprime el case 3 se está ejecutando y el problema probablemente esté en el for o el if.

Ve sustituyendo código, hasta encontrar la raíz del problema.

Si no se imprime puede que el break del case 2: se esté ejecutando al principio del case 3:
Elimina el case 2: y su break; A ver si funciona.

No se me ocurre nada más a simple vista.
I like to test things.

MrSimpatia

#2
Borre el case 2 y sigue dando el error, pero se imprime el segundo for, osea el primero no se ejecuta, pero el segundo si, se lista los datos que pido, pero no se borran

OmarHack

Debe ser que el condicional del if no se cumple.
I like to test things.

3n31ch

#4
Que coincidencia, justo te respondí otro mensaje previniendote de esto bug. Te explico que pasa:
Scanner tiene un "bug" que ocurre cuando solicitas un número y luego un String. Esto ocurre por un problema con el buffer, que detecta el "enter" como un carácter.

Puedes solucionar tu error poniendo un: dato.nextLine();, justo antes de tu busca2 = dato.nextLine();


Algo así:
Código (java) [Seleccionar]

case 3:
System.out.println("Cual desea eliminar? ");
                                       dato.nextLine();
busca2 = dato.nextLine();



PD: No te daré una idea de como hacer el case 2, creo que puedes hacerlo. Suerte!

MrSimpatia

No tenes una idea de el amor que te tengo 3n31ch! Mil gracias, y bueno me rompere un rato la cabeza para ver como hacer lo otro jajaj