Java Scanner nicht "fertig" reading input
Habe ich Probleme mit java-der Scanner-Klasse. Ich kann es Lesen, meine Ideen ganz gut, aber das problem ist, wenn ich ausgeben wollen etwas. Gegeben mehrere Zeilen der Eingabe, die ich drucken möchte, nur EINE Zeile, wenn alle Eingabe wurde vollständig Lesen. Hier ist der code, den ich verwenden für Lesen Eingabe:
public static void main(String[] args){
Scanner scanner = new Scanner(System.in); //scanner reads block of input
while(scanner.hasNextLine()){
//body of loop goes here
String s = scanner.nextLine();
Scanner ls = new Scanner(s); //scanner to parse a line of input
while(ls.hasNext()){
//body of nested loop goes here
ls.next();
}
}
System.out.println("Fin");
}
Selbst wenn alle Linien der Eingabe gelesen wurde, das Programm nicht erreichen, das System.aus.println-Nachricht. (Beachten Sie, dass die Nachricht nicht irgendwo anders gehen, oder es wird ausgegeben, wie oft die Schleife ausgeführt wird). Wie kann ich dieses Problem beheben? Jegliche Hilfe würde sehr geschätzt werden.
Können Sie einige Fehler überprüfen Drucke in den beiden while-Schleifen und mir sagen, was es klemmt?
Ich versucht, indem Sie druckt in jeder Schleife, aber es scheint sich nicht um eine Endlosschleife, statt seine mehr wie die äußere while-Schleife wartet unendlich mehr input
jemand dachte, dass Sie weiter unten.
mögliche Duplikate von Wie zu beenden, Scanner, wenn die Eingabe vollständig ist?
Ich versucht, indem Sie druckt in jeder Schleife, aber es scheint sich nicht um eine Endlosschleife, statt seine mehr wie die äußere while-Schleife wartet unendlich mehr input
jemand dachte, dass Sie weiter unten.
mögliche Duplikate von Wie zu beenden, Scanner, wenn die Eingabe vollständig ist?
InformationsquelleAutor mPierce | 2012-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie ich sehen kann, in Ihrem äußeren while-Schleife, die Sie verwendet haben
Methode. Diese Methode wird blockiert, wenn es hat zu warten für den Eingang. Auch Sie haben
Anweisung. So ist das system.wird auf eine Eingabe wartet die ganze Zeit, daher der hasNextLine () - Methode hat zu warten für den Eingang.
Das ist, warum die Steuern hängen in der Schleife und kann nicht weiter fortfahren.
Um es zu beheben, können Sie zuerst speichern der Eingabe in eine string-variable und dem Aufruf der scanner-Konstruktor auf.
InformationsquelleAutor me_digvijay
Die Sie Lesen, aus einem Unendlichen Strom in diesem Fall.
hasNextLine()
wird immer wieder wahr", wenn eine Zeile in den input des Scanners. Als einSystem.in
, es wird das Lesen von der Tastatur, es sei denn, Sie kündigen es an, oder sagen Sie den stream zu stoppen.Drücken Sie "Strg+Z" am Ende, werden Sie sehen, dass es funktioniert.
Bearbeiten : Sie könnte so etwas tun...
Wie Ihr Programm wird kommen, zu wissen, dass sollte es jetzt aufhören?
Sie weiß es nicht, das ist das problem. Es hält nur warten, für eine andere Linie der Eingang, wenn ich will, dass es die Ausgabe nach der alle Eingaben gelesen worden ist.
Das ist, was ich wurde gefragt, u....wenn Sie wollen, es zu stoppen??
Wenn ich einen block input, sagen wir 3 Zeilen text, ich will es zu stoppen, nachdem Sie liest die Dritte Zeile
InformationsquelleAutor Shashank Kadne
Müssen Sie dem Programm mitteilen, dass es keine mehr input. Dies geschieht durch Anhängen einer EOF-Zeichen. Dies kann manuell geschehen auf Linux durch drücken von Strg-D in die Konsole. Ich denke unter Windows drücken Sie Ctrl-Z. Der stream wird automatisch geschlossen, wenn Sie sind Rohrleitungen-Eingang von einem Programm zum anderen.
zB.
InformationsquelleAutor Dunes
Die Magie der
Ist, dass es nie aufhören wird, wird die Eingabe vom System (es sei denn, Sie schließen Sie die Eingabe mit Strg+d (für Mac)).
Um die Schleife zu stoppen, schlage ich vor, werfen etwas mehr in dem Zustand, als nur hasNextLine().
E. g.
InformationsquelleAutor Mirror318