Java - NoSuchElementException en un while..

 
Vista:
sin imagen de perfil

NoSuchElementException en un while..

Publicado por Christian (6 intervenciones) el 25/05/2017 16:17:58
Hola a Todos, espero alguien pueda hecharme uncable conesto, soy novato en el tema y perdón si muchas líneas estan escritas de manera no convencional, además agradecería lo comentasen también.

Este es el código que tengo (parte de el)...

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
boolean salir=false
while (salir==false){
	System.out.println("ESTAMOS DENTRO DEL WHILE");
	Metodos.comprobarMenuOpcionPrincial(opcioningresada, opcion, salir)
       ..............
}
 
 
//METODO DE CONTROL DEL INGRESO POR TECLADO
 
public static String comprobarOpcionMenuPrincipal(String opcioningresada, Scanner opcion, boolean salir){
	boolean opcioncorrecta=false;
	while (!opcioncorrecta){//Control texto Crear
		System.out.println("\nEsperando datos...");
		opcioningresada = opcion.nextLine();
		opcioningresada = opcioningresada.toString();
		if (opcioningresada.equalsIgnoreCase("Crear")){opcioncorrecta=true;}
		else if (opcioningresada.equalsIgnoreCase("Listar")){opcioncorrecta=true;}
		else if (opcioningresada.equalsIgnoreCase("Eliminar")){opcioncorrecta=true;}
		else if (opcioningresada.equalsIgnoreCase("Salir")){ opcioncorrecta=true; salir=true;}
		else   {
			System.out.println("Ha escrito: "+opcioningresada);
			System.out.println("Aunque no se tienen en cuenta mayúsculas o minúsculas");
			System.out.println("debe teclear alguna de las opciones");
			Metodos.mostrarMenuPrincipal();}
		}//Fin del While
		return opcioningresada;
		}//Fin Bloque de control


Es un menú , y el método verifica que se ingrese sí o sí una de las palabras del menú o no sale del bucle.
Mientras elijo cualquier opción, todo funciona correctamente, excepto cuando elijo salir, mi intención es que al elegir salir, la variable salir sea true, por lo que no ingrese al while ya que salir==false, no sería validado..

el print "ESTAMOS DENTRO DEL WHILE", lo he puesto para ver el error, y he comprobado que sigue entrando al while...

por lo que esta sentencia no está funcionando else if (opcioningresada.equalsIgnoreCase("Salir")){ opcioncorrecta=true; salir=true;} la asignación de true a la variable salir, no se hace...

Me podrían decir que estoy haciendo mal?
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
sin imagen de perfil
Val: 358
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

NoSuchElementException en un while..

Publicado por Nicolas (137 intervenciones) el 25/05/2017 16:28:53
Hola Christian.
El tema que tu tienes es que salir la estas trabajando en el Metodo comprobarOpcionMenuPrincipal. Solo le cambias a true pero dentro del método.
Solución: en vez de devolver un objeto del tipo string devuelves un tipo boolean y desde el metodo que lo instancias se lo asignas a salir.
Por ej:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
salir = Metodos.comprobarMenuOpcionPrincial(opcioningresada)
....
 
public static boolean comprobarOpcionMenuPrincipal(String opcioningresad){
boolean opcioncorrecta=false;
while (!opcioncorrecta){//Control texto Crear
System.out.println("\nEsperando datos...");
opcioningresada = opcion.nextLine();
opcioningresada = opcioningresada.toString();
if (opcioningresada.equalsIgnoreCase("Crear")){opcioncorrecta=true;}
else if (opcioningresada.equalsIgnoreCase("Listar")){opcioncorrecta=true;}
else if (opcioningresada.equalsIgnoreCase("Eliminar")){opcioncorrecta=true;}
else if (opcioningresada.equalsIgnoreCase("Salir")){ opcioncorrecta=false;}
else {
System.out.println("Ha escrito: "+opcioningresada);
System.out.println("Aunque no se tienen en cuenta mayúsculas o minúsculas");
System.out.println("debe teclear alguna de las opciones");
Metodos.mostrarMenuPrincipal();}
}//Fin del While
return opcioningresada;
}//Fin Bloque de control
return opcioncorrecta;


Espero que te sea de ayuda.
Abrazo.
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
sin imagen de perfil

NoSuchElementException en un while..

Publicado por Christian (6 intervenciones) el 25/05/2017 16:50:55
Nicolas muchísimas gracias por contestar..

El problema es que ya estoy utilizando la asignación que me comentas con esta línea.

opcioningresada=Metodos.comprobarOpcionMenuPrincipal(opcioningresada, opcion, salir);

por que luego, con opción ingresada voy haciendo diferentes if

if opcioningresarda igual "agregragar musica" {......}
if opcioningresarda igual "eliminar musica" {......}

es decir, negecito que el método me retorne ese String.

Crees que si en lugar de devolver Strig, devuelvo un array con dos string, donde pongo la opcioningesada y salir y luego fuera del método con if´s hago las diferntes asignaciones, sería la solución mas "metódica?" Como sería?
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
sin imagen de perfil

NoSuchElementException en un while..

Publicado por Christian (6 intervenciones) el 25/05/2017 16:38:07
el mensaje de NoSuchElement Exception lo he detectado, a causa de que "espero " que salir sea True, había puesto una sentencia que cerraba el Scanner, pero al no salir y entrar en el while nuevamente, al intentar usar el scanner daba el error.

No obstante, no consigo que SALIR SEA TRUE, es decir, la opción salir no me funciona, el esto sí...
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
sin imagen de perfil

NoSuchElementException en un while.. RESUELTO

Publicado por Christian (6 intervenciones) el 25/05/2017 18:33:36
Gracias Nicolas por la aportación,

desde anoche estaba con este problema, diciéndome tu que el problema era que trabajaba la variable de forma local al Método (de teoría lo había estudiado) ahora lo he visto en carne propia. Lo he resuelto de esta manera.

//En mi clase Métodos

class Metodos{

public static boolean salir; // declaro la variable salir como static

//y en el método lo modifico así
public static String comprobarOpcionMenuPrincipal(String opcioningresada, Scanner opcion){
......
......
else if (opcioningresada.equalsIgnoreCase("Salir")){opcioncorrecta=true; Metodos.salir=true;}

}

//En la parte del while (que está en otra clase)

Metodos.salir=false;
while (Metodos.salir==false){

opcioningresada=Metodos.comprobarOpcionMenuPrincipal(opcioningresada,opcion)//ya no necesito pasarle la la variable para salir

}


Muchas gracias!
Espero le sirva también a alguien mas.....
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