Foro sobre Java SE > Problemas con la clase Scanner
En ningun momento indicas donde te da un error ni que error es este
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)
Pues si, aparentemente es porque intentas acceder a la infomación de un Scanner después de haberle hecho close.
Pues si, en principio era por eso mismo...gracias igualmente!
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!
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!
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
NOpe no entiendo eso pero por metodo he de crear el Scanner tec=new Scanner(..
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
No, respondan no lo vere. Saludos.
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!