Pregunta

Estoy intentando ingresar texto desde el teclado en Java 6.Soy nuevo en el idioma y cada vez que ejecuto el siguiente código, aparece este error:

package test1;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
    boolean quit = false;
    while (!quit){
        Scanner keyIn;
        String c = "x";
        while (c != "y" && c != "n") {
            keyIn = new Scanner(System.in);
            c = keyIn.next();
            keyIn.close();
        }
        if (c == "n")
            quit = true;
    }
 }
}


Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1347)
at test1.Test.main(Test.java:11)

¿Estoy haciendo un mal uso del método next()?Pensé que esperaría la entrada del usuario, pero parece que no es así y arrojó la excepción que dice que no queda nada en el escáner.

¿Fue útil?

Solución

El motivo de la excepción es que estás llamando. keyIn.close() después de usar el escáner una vez, lo que no solo cierra el Scanner pero también System.in.En la siguiente iteración se crea un nuevo Scanner que rápidamente explota porque System.in ahora está cerrado.Para solucionarlo, lo que debes hacer es crear un escáner solo una vez antes de ingresar al while bucle y omita el close() llama por completo ya que no quieres cerrar System.in.

Después de arreglar eso, el programa aún no funcionará debido a la == y != comparaciones de cadenas que haces.Al comparar cadenas en Java debes usar equals() para comparar el contenido de la cadena.cuando usas == y != estás comparando las referencias de objetos, por lo que estas comparaciones siempre devolverán falso en tu código. Siempre usa equals() para comparar cadenas.

while (!quit){
    Scanner keyIn = new Scanner(System.in);
    String c = "x";
    while (!c.equals("y") && !c.equals("n")) {
        c = keyIn.next();
    }
    if (c.equals("n"))
        quit = true;
}

Otros consejos

Para evaluar cadenas que tienen que utilizar .equals

while (! C.equals ( "Y")) {hacer cosas ...

  • declarar su referencia de escáner fuera de sus bucles. usted no tiene que crear y cerrar cada vez.

  • comparar cadena de texto con el método equals, no con el operador ==.

Trate de usar nextLine () y sólo mirando el primer elemento de la cadena que se devuelve.

El! = Y == sólo funcionará cuando se utiliza contra personajes u otros tipos primitivos, que sólo funcionará en C #. Usted tendrá que utilizar .equals para asegurar que está mirando por la igualdad adecuado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top