Dies ist das Programm
%Vor% Ich weiß nextInt()
liest nur die Ganzzahl nicht "\n"
, aber warum brauchen wir input.nextLine()
, um "\n"
zu lesen? ist es nötig?? weil ich denke, auch ohne input.nextLine()
, nachdem es wieder zu try {}
geht, kann input.nextInt()
immer noch die nächste Ganzzahl lesen, die ich eintippe, aber tatsächlich ist es eine Endlosschleife.
Ich weiß immer noch nicht die Logik dahinter, hoffe, jemand kann mir helfen.
Der Grund dafür ist, was passiert, wenn die Eingabe fehlschlägt .
Versuchen Sie beispielsweise, den input.nextLine()
-Teil zu entfernen, führen Sie das Programm erneut aus, und geben Sie abc
ein und drücken Sie Return
Das Ergebnis ist eine Endlosschleife. Warum?
Weil nextInt()
versucht, die eingehende Eingabe zu lesen. Es wird sehen, dass diese Eingabe keine Ganzzahl ist und die Ausnahme auslösen wird. Die Eingabe wird jedoch nicht gelöscht. Es ist immer noch abc
im Puffer. Wenn man also zur Schleife zurückkehrt, wird versucht, dieselbe abc
immer wieder zu analysieren.
Wenn nextLine()
verwendet wird, wird der Puffer gelöscht, so dass die nächste Eingabe, die Sie nach einem Fehler gelesen haben, die neue Eingabe ist, die nach der fehlerhaften Zeile steht, die Sie eingegeben haben.
aber warum brauchen wir die input.nextLine () um das "\ n" zu lesen? ist es notwendig ??
Ja (eigentlich ist es sehr üblich das zu tun), sonst wie wirst du den verbleibenden \n
verbrauchen? Wenn Sie nextLine
nicht verwenden möchten, um die linke \n
zu konsumieren, verwenden Sie ein anderes Scannerobjekt (ich nicht empfehle dies):
oder verwenden Sie nextLine
, um den Ganzzahlwert zu lesen und später in int
zu konvertieren, damit Sie das neue Zeilenzeichen später nicht mehr benötigen.
Tags und Links java