Mit Scanner.next () Texteingabe zu erhalten
-
21-08-2019 - |
Frage
Ich versuche, die Texteingabe über die Tastatur in Java 6. Ich bin neu in die Sprache zu erhalten und wenn ich den folgenden Code ausführen, bekomme ich diesen Fehler:
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)
Bin ich falsch mit der Methode next ()? Ich dachte, es für die Benutzereingabe warten würde, aber es sieht aus wie es nicht und wirft die Ausnahme ist zu sagen, dass es nichts in den Scanner links ist.
Lösung
Der Grund für die Ausnahme ist, dass Sie keyIn.close()
fordern, nachdem Sie die Scanner einmal verwenden, das nicht nur die Scanner
schließt aber auch System.in
. Schon am nächsten Iteration eine neue Scanner
schaffen, die explodiert sofort weil System.in
ist nun geschlossen. Um dies zu beheben, was Sie tun sollten, ist nur einen Scanner erstellen, sobald bevor Sie die while
Schleife eingeben, und überspringen ganz den close()
Anruf, da Sie nicht wollen, System.in
schließen.
Nach dem Fixieren, dass das Programm immer noch nicht funktionieren, weil die ==
und !=
Stringvergleiche Sie tun. Wenn Strings in Java zu vergleichen, müssen Sie equals()
verwenden, um die Zeichenfolge Inhalte zu vergleichen. Wenn Sie ==
verwenden und !=
Sie die Objektreferenzen vergleichen, so werden diese Vergleiche immer false zurück in Ihrem Code. immer equals()
verwenden, um Strings zu vergleichen.
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;
}
Andere Tipps
Um Strings bewerten Sie .equals verwenden
while (! C.equals ( "y")) {Dinge tun ...
-
Ihre Scanner Referenz außerhalb Loops erklären. Sie nicht, es schaffen und es jedes Mal zu schließen.
-
string Text mit der Methode
equals
vergleichen, nicht mit dem Betreiber==
.
Versuchen Sie es mit nextline () und nur beim ersten Element im String suchen, der zurückgegeben wird.
Die! = Und == wird nur funktionieren, wenn sie gegen Zeichen oder andere primitive Typen verwendet, die nur in c # arbeiten. Sie müssen .equals verwenden Sie Überprüfung auf korrekte Gleichheit zu gewährleisten.