Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problemas con la clase Scanner

Hola gente, que tal?

Me gustaría saber cómo sería el código correcto para, antes de realizar un determinado proceso, preguntar por pantalla si se quiere realizar. Sólo se podría teclear "y" o "n" (si o no), y en el caso de teclear algo diferente volver a preguntar. En el caso de teclear "y", realizar el proceso, obviamente.

Ahora les muestro lo que tengo en mi programa:
En un momento dado del programa tengo el siguiente código donde intento hacer lo descrito mas arriba:

Scanner sc = new Scanner(System.in);
System.out.println("Desea crear el ElementsFile (.elt) de "+archivo+".dat? (Y/N)");
strOpcion=sc.nextLine();

while(!strOpcion.equals("Y") || !strOpcion.equals("y") || !strOpcion.equals("N") || !strOpcion.equals("n")){
System.out.println("Por favor, teclee \"Y\" o \"N\" ");
strOpcion=sc.nextLine();
}
sc.close();

if(strOpcion.equals("y") || strOpcion.equals("Y")){
elements.crearElements(archivo);
}

NOTA: Mucho antes de realizar esto, yo ya utilizo un scanner en el programa para pedir el nombre del archivo a leer. El codigo seria el siguiente:
try (Scanner sc = new Scanner(System.in)) {
System.out.println("Introduzca el nombre del archivo .dat (sin extension).");
archivo=sc.nextLine();
sc.close();
}

Puede ser que el error sea porque ya hago sc.close() y mas adelante ya no puedo usar sc?

Gracias por adelantado!

septiembre 19, 2014 | Registered Commenterdarkonl

En ningun momento indicas donde te da un error ni que error es este

septiembre 19, 2014 | Unregistered CommenterUnoPorAhi

Si, perdon a todos! El error salta justo antes de entrar al loop while!

El error que salta es el siguiente:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at phreeqctohydra.PhreeqcToHydra.main(PhreeqcToHydra.java:123)

septiembre 21, 2014 | Registered Commenterdarkonl

Pues si, aparentemente es porque intentas acceder a la infomación de un Scanner después de haberle hecho close.

septiembre 21, 2014 | Unregistered CommenterUnoPorAhi

Pues si, en principio era por eso mismo...gracias igualmente!

septiembre 22, 2014 | Registered Commenterdarkonl

Vuelvo a las andadas! Sigo intentando realizar correctamente el ejercicio. Ahora en lugar de una sentencia if dentro del while, utilizo una sentencia switch. La idea sigue siendo la misma, que al teclear Y se cree el archivo ".elt" y que al teclear N simplemente salga del while. El codigo es el siguiente:

OUTER:
while (sc.hasNext()) {
switch (strOpcion) {
case "Y":
case "y":
elements.crearElements(archivo);
break OUTER;
case "N":
case "n":
System.out.println("No se creará el archivo .elt de "+archivo+".dat .");
break OUTER;
default:
System.out.println("Por favor, teclee Y o N.");
strOpcion=sc.nextLine();
break;
}
}
La variable sc la tengo declarada mucho antes, donde pregunto el nombre del archivo y donde posteriormente no hago un sc.close() que era lo que antes hacia y me daba problemas.

Ahora bien, al entrar en el while, el programa queda en bucle infinito...por qué puede ser?

Un abrazo!

septiembre 24, 2014 | Unregistered Commenterdarkonl

Ya está, lo tengo solucionado. He aquí el código en cuestión:

System.out.println("Desea crear el ElementsFile (.elt) de "+archivo+".dat? (Y/N)");

OUTER:
while (sc.hasNextLine()) {
strOpcion=sc.nextLine();
switch (strOpcion) {
case "Y":
case "y":
elements.crearElements(archivo);
break OUTER;
case "N":
case "n":
System.out.println("No se creará el archivo .elt de "+archivo+".dat .");
break OUTER;
default:
System.out.println("Por favor, teclee Y o N.");
break;
}
}

El problema era que estaba el strOpcion=sc.nextLine(); en el default del switch...grave error!

septiembre 29, 2014 | Registered Commenterdarkonl

Entonces la moraleja es que solo se puede poner un Scanner para toda la clase o algo asi ? quiero decir aparentemente parece que en el problema q yo tengo declaro diferentes scanners en metodos dentro de una misma clase Scanner tec=new... Scanner tec2=... en metodos diferentes

junio 11, 2020 | Unregistered CommenterNoob

NOpe no entiendo eso pero por metodo he de crear el Scanner tec=new Scanner(..

junio 11, 2020 | Unregistered CommenterNoob

Mi menu lleva a un metodo q puede llevar al mismo menu pero cambiado para hacer otras cosas al recivir el metodo otro valor, creo que igual lo que hago es liarla un poco xd

junio 11, 2020 | Unregistered CommenterNoob

No, respondan no lo vere. Saludos.

junio 16, 2020 | Unregistered CommenterNoob