Wie beende ich den Scanner, wenn die Eingabe abgeschlossen ist?

7
%Vor%

Ich frage mich nur, wie ich das Programm beenden kann, nachdem ich die Eingabe abgeschlossen habe? Da der Scanner nach mehreren "Enter" noch fortfahren würde, nehme ich an, dass ich weiterhin Eingaben eingeben werde ... Ich habe es versucht:

%Vor%

und

%Vor%

Sie haben nicht funktioniert .... Das Programm geht weiter und verwirrt mit der ursprünglichen Absicht,

    
user2318175 25.04.2013, 05:12
quelle

6 Antworten

19

Das Problem ist, dass ein Programm (wie Ihres) nicht weiß, dass der Benutzer Eingaben eingegeben hat, es sei denn, der Benutzer ... sagt es irgendwie.

Es gibt zwei Möglichkeiten, wie der Benutzer dies tun könnte:

  • Geben Sie einen "Dateiende" -Marker ein. Unter UNIX ist dies (typischerweise) CTRL + D CTRL <+ kb> Z . Das führt dazu, dass hasNextLine() false zurückgibt.

  • Geben Sie eine spezielle Eingabe ein, die vom Programm als "Ich bin fertig" erkannt wird. Zum Beispiel könnte es eine leere Zeile oder ein spezieller Wert wie "exit" sein. Das Programm muss dies speziell testen.

(Sie könnten auch einen Timer verwenden und davon ausgehen, dass der Benutzer fertig ist, wenn er keine Eingabe für N Sekunden oder N Minuten eingibt. Aber das ist keine benutzerfreundliche Art, dies zu tun. )

Der Grund dafür, dass Ihre aktuelle Version fehlschlägt, ist, dass Sie == verwenden, um nach einer leeren Zeichenfolge zu suchen. Sie sollten entweder die Methoden equals oder isEmpty verwenden.

Andere Dinge, die zu berücksichtigen sind, sind die Groß- / Kleinschreibung (z. B. "Ausgang" gegenüber "Ausgang") und die Auswirkungen von führenden oder nachfolgenden Leerräumen (z. B. "Ausgang" gegen "Ausgang").

    
Stephen C 25.04.2013, 05:18
quelle
4

Der Stringvergleich wird mit .equals() und nicht mit == durchgeführt.

Probieren Sie also scan.nextLine().equals("") .

    
Shobit 25.04.2013 05:17
quelle
1

Sie müssen nach einem bestimmten Muster suchen, das das Ende Ihrer Eingabe anzeigt, zum Beispiel "##"

%Vor%     
nchouhan 25.04.2013 05:21
quelle
0

Bei diesem Ansatz müssen Sie explizit einen Beendigungsbefehl oder eine Beendigungsbedingung erstellen. Zum Beispiel:

%Vor%

Zusätzlich müssen Sie String-Gleich-Fälle mit .equals() nicht == behandeln. == vergleicht die Adressen von zwei Strings, die, sofern sie nicht das gleiche Objekt sind, niemals wahr sein werden.

    
Zyerah 25.04.2013 05:17
quelle
0

In diesem Fall empfehle ich Ihnen, do, while loop statt while zu verwenden.

%Vor%

Um das Programm zu beenden, müssen Sie einfach einen String-Header z. Ausfahrt. Wenn die Eingabe gleich ist, um zu beenden, wird das Programm beendet. Außerdem können Benutzer Strg + C drücken, um das Programm zu beenden.

    
Jason 25.04.2013 05:23
quelle
0

Sie können die nächste Eingabezeile von der Konsole aus überprüfen und nach Ihrem Abschlusseintrag suchen (falls vorhanden).

Angenommen, Ihr Beendigungseintrag ist "quit", dann sollten Sie diesen Code versuchen: -

%Vor%

Versuchen Sie diesen Code. Ihre Terminzeile sollte von Ihnen eingegeben werden, wenn Sie den Scanner schließen / beenden wollen.

    
Java Developers Guide 25.04.2013 05:48
quelle

Tags und Links