Question

Je suis en train d'obtenir la saisie de texte à partir du clavier en Java 6. Je suis nouveau à la langue et à chaque fois que je lance le code suivant, je reçois cette erreur:

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)

Suis-je mis-en utilisant la méthode suivante ()? Je pensais que ce serait attendre l'entrée d'utilisateur, mais il semble que ce n'est pas et jeter l'exception en disant qu'il n'y a rien dans le scanner.

Était-ce utile?

La solution

La raison de l'exception est que vous appelez après avoir utilisé keyIn.close() le scanner une fois, qui ferme non seulement, mais aussi la Scanner System.in. L'itération très prochaine fois que vous créez un nouveau qui souffle rapidement while parce que est maintenant fermé close(). Pour résoudre ce problème, ce que vous devez faire est de créer seulement un scanner une fois avant d'entrer dans la boucle == et sauter le tout appel depuis != vous ne voulez pas fermer equals().

Après avoir fixé le programme ne fonctionne toujours pas à cause des comparaisons de chaînes et <=> vous faites <=>. Lorsque l'on compare les chaînes en Java, vous devez utiliser pour comparer les <=> contenu de la chaîne. Lorsque vous utilisez et <=> vous comparez <=> les références d'objets, de sorte que ces comparaisons renvoie toujours faux dans votre code. Toujours utiliser pour comparer des chaînes <=>.

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;
}

Autres conseils

Pour évaluer les chaînes que vous devez utiliser .equals

while (! C.equals ( "y")) {faire des choses ...

  • déclarer votre référence du scanner en dehors de vos boucles. vous ne devez pas créer et fermer chaque fois.

  • comparer le texte de chaîne avec la méthode equals, pas avec l'opérateur ==.

Essayez d'utiliser nextLine () et ne regardant que le premier élément de la chaîne qui est renvoyée.

! = Et == ne fonctionne que lorsqu'il est utilisé contre des personnages ou d'autres types primitifs, qui ne fonctionnera que dans c #. Vous devrez utiliser .equals pour vous assurer la vérification de l'égalité correcte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top