À L'Aide D'Un Scanner.next() pour obtenir la saisie de texte
J'essaie d'obtenir la saisie de texte à partir du clavier dans la version 6 de Java. Je suis nouveau à la langue et à chaque fois que j'exécute le code suivant, j'ai 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 mal à l'aide de la méthode next ()? J'ai pensé qu'il serait d'attendre la saisie de l'utilisateur, mais on dirait qu'il n'est pas et en jetant l'exception de dire qu'il n'y a plus rien dans le scanner.
qu'est-ce que ton code fait exactement et quelle est la source?
tout cela est pour essayer d'obtenir à l'utilisateur de saisir "y" ou "n" et si son "y" garder la boucle, sinon la sortie. l'erreur arrive n'importe quelle lettre je de la presse.
tout cela est pour essayer d'obtenir à l'utilisateur de saisir "y" ou "n" et si son "y" garder la boucle, sinon la sortie. l'erreur arrive n'importe quelle lettre je de la presse.
OriginalL'auteur wakingrufus | 2009-07-02
Vous devez vous connecter pour publier un commentaire.
La raison de cette exception est que vous appelez
keyIn.close()
une fois que vous utilisez le scanner à la fois, ce qui non seulement ferme laScanner
mais aussiSystem.in
. La prochaine itération de vous créer un nouveauScanner
qui est promptement coups parce queSystem.in
est maintenant fermé. Pour corriger cela, ce que vous devez faire est de créer un seul scanner une fois avant d'entrer dans lawhile
boucle, et de sauter laclose()
appel entièrement puisque vous ne voulez pas fermerSystem.in
.Après la fixation que le programme ne fonctionne toujours pas, en raison de la
==
et!=
comparaisons de chaînes que vous faites. Lors de la comparaison des chaînes de caractères en Java, vous devez utiliserequals()
de comparer le contenu de la chaîne. Lorsque vous utilisez==
et!=
vous comparez les références de l'objet, de sorte que ces comparaisons renverra toujours false dans votre code. Toujours utiliserequals()
pour comparer des chaînes de caractères.Merci beaucoup, cette réponse résolu mine problème aussi! Je ne savais pas que".close();' ferme 'système.dans' !
OriginalL'auteur John Kugelman
Pour évaluer les chaînes que vous avez à utiliser .est égal à
while(!c.equals("o")) { faire des trucs...
OriginalL'auteur
déclarer votre Scanner de référence à l'extérieur de vos boucles. vous n'avez pas à le créer et à le fermer à chaque fois.
de comparaison de chaînes de texte avec la méthode
equals
, pas avec l'opérateur==
.OriginalL'auteur cd1
Essayez d'utiliser nextLine() et en regardant uniquement le premier élément de la chaîne est renvoyée.
L' != et == fonctionnera uniquement lorsqu'il est utilisé contre caractères ou d'autres types de primitives, qui ne fonctionnera qu'en c#. Vous aurez besoin d'utiliser .est égal à vous assurer de la vérification de l'égalité.
OriginalL'auteur Corey Sunwold