Wie funktioniert input.nextInt () genau?

8

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.

    
高亮节 26.01.2015, 16:05
quelle

2 Antworten

6

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.

    
RealSkeptic 26.01.2015 16:13
quelle
4
  

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):

%Vor%

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.

    
Maroun 26.01.2015 16:08
quelle

Tags und Links