Foro sobre Java SE > NextLine doesn't work fine
Lo mejor es que aprendas a depurar tu programa:
En Eclipse:
http://www.vogella.com/tutorials/EclipseDebugging/article.html
En Netbeans:
http://cobweb.cs.uga.edu/~shoulami/sp2009/cs1301/tutorial/NetBeansDebuggerTutorial/NetBeansDebuggerTutorial.htm
Un saludo
Perdona, pero si he escrito el post es porque con el debug no he podido ver que problema tiene el código. Hacer debug de un Scanner no es igual de sencillo que de una variable.
Aún así, revisando cada propiedad (variable) de la clase Scanner, mi keyboard, no he podido ver que problema tiene. Se supone que la propia instrucción keyboard.nextLine()
debería detener la ejecución y esperar a que el usuario introduzca un dato. En cambio, salta directamente la excepción sin llegar a detenerse. Podría deberse a que en el buffer del scanner se encuentra un \n, que provocaría que la app no se detenga, pero no es así, dado que la vez anterior en la que se utiliza el scanner es mediante la misma instrucción, keyboard.nextLine()
, lo cual debería eliminar el salto de línea del buffer.
No se si tu respuesta era con buena intención o no, pero en caso de que no fuera así, permíteme decirte que todos sabemos ser gilipollas.
Encima de dedicar tiempo a responderte me vienes con esas. Eres idiota.
Como comprenderas, no tengo una bola de cristal para saber lo que sabes hacer ni lo que has hecho.
Como quieres que te ayudemos si el codigo que has posteado ni siquiera compila?
Crees que sabemos depurar mentalmente?
Por no poner, ni siquiera pones la traza de excepcion completa. Te da pereza no? No sera:
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source) ??
Si es asi, solo hay que buscar en Google para encontrar la solucion a TU PROBLEMA, cosa que hasta un gilipollas sabria hacer:
http://stackoverflow.com/questions/7209110/java-util-nosuchelementexception-no-line-found
Aparte de lo bien dicho por @UnoPorAhi, me parece impresentable que se publique una petición de ayuda en idioma inglés en este foro.
No es cuestión de saber ser gilipollas o no, y menos aún de dudar de las intenciones de quien te responde correctamente, sino de hacer preguntas bien hechas.
Hi,
I am coding a program in Java and I don't know why readLine() doesn't work fine after the line "Deseas realizar otra operacion (Y/N)?: ",
Do you know what is happening? I'm following the next steps: First I'm creating a new "Cliente" and then, when program question me about if i want to make other action, the exception is thrown. (The exact error is NoSuchElementException):
while (true)
{
do {
System.out.print("Esperando instruccion: ");
userInput = keyboard.nextLine();
keyboard.nextLine();
parameters = userInput.split(" ");
if(parameters.length != 2)
{
System.out.println("\nInstruccion erronea. Recuerde que puede crear, listar o eliminar elementos de musica, clientes y ventas.");
}
else
{
if(parameters[0].equalsIgnoreCase("crear"))
{
if(compruebaSegundoParametro(parameters[1]))
{
insertaElemento(parameters[1].toLowerCase());
encontrado = true;
}
else
{
System.out.println("\nElemento erroneo. Recuerde que puede crear musica, clientes o ventas.");
}
}
else if(parameters[0].equalsIgnoreCase("listar"))
{
if(compruebaSegundoParametro(parameters[1]))
{
switch(parameters[1])
{
case "musica":
listarColeccion(totalMusica);
break;
case "clientes":
listarColeccion(totalClientes);
break;
case "ventas":
listarColeccion(totalVentas);
break;
default:
break;
}
encontrado = true;
}
else
{
System.out.println("\nElemento erroneo. Recuerde que puede listar musica, clientes o ventas.");
}
}
else if(parameters[0].equalsIgnoreCase("eliminar"))
{
if(compruebaSegundoParametro(parameters[1]))
{
switch(parameters[1])
{
case "musica":
eliminarElemento(totalMusica);
break;
case "clientes":
eliminarElemento(totalClientes);
break;
case "ventas":
eliminarElemento(totalVentas);
break;
default:
break;
}
encontrado = true;
}
else
{
System.out.println("\nElemento erroneo. Recuerde que puede eliminar musica, clientes o ventas.");
}
}
else {
System.out.println("\nInstruccion erronea. Recuerde que puede crear, listar o eliminar elementos de musica, clientes y ventas.");
}
}
} while(!encontrado);
//Volver del menu de accion correspondiente supone la ejecucion de la accion
//que habia seleccionado el usuario. Se le pregunta si desea realizar otra accion.
do {
System.out.print("Deseas realizar otra operacion (Y/N): ");
continuar = keyboard.nextLine();
//Si no es el valor esperado vacia el string forzando al bucle a una nueva
//iteracion, indicando al usuario que lo introducido es incorrecto.
if (!continuar.equalsIgnoreCase("y") && !continuar.equalsIgnoreCase("n"))
{
System.out.println("La opcion seleccionada es incorrecta.");
continuar = "";
}
} while(continuar.isEmpty());
//Si el usuario quiere finalizar el programa (N en la respuesta anterior)
//se procede a tal.
if(continuar.equalsIgnoreCase("n"))
{
cierraPrograma(keyboard);
}
}
}