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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top