2015-01-26 7 views
8

Dies ist das ProgrammWie funktioniert input.nextInt() genau?

public class bInputMismathcExceptionDemo { 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    boolean continueInput = true; 
    do { 
     try { 
      System.out.println("Enter an integer:"); 
      int num = input.nextInt(); 

      System.out.println("the number is " + num); 
      continueInput = false; 
     } 
     catch (InputMismatchException ex) { 
      System.out.println("Try again. (Incorrect input: an integer is required)"); 
     } 
     input.nextLine(); 
    } 
    while (continueInput); 

} 
} 

Ich weiß nextInt() nur die ganze Zahl nicht lesen die "\n", aber warum sollten wir brauchen die input.nextLine() die "\n" zu lesen? ist es nötig?? weil ich denke, auch ohne input.nextLine(), nachdem es zurückgeht auf try {}, die input.nextInt() kann immer noch die nächste Ganzzahl ich Typ lesen, aber in Wirklichkeit ist es eine Endlosschleife.

Ich weiß immer noch nicht die Logik dahinter, hoffe jemand kann mir helfen.

+2

lesen Sie diese http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html –

Antwort

4

aber warum brauchen wir die input.nextLine() um das "\ n" zu lesen? ist es nötig??

Ja (eigentlich ist es sehr üblich, das zu tun), sonst wie werden Sie die restlichen \n verbrauchen? Wenn Sie nicht nextLine verwenden wollen die linken \n zu verbrauchen, ein anderes Scanner-Objekt verwenden (I do nicht empfehlen diese):

Scanner input1 = new Scanner(System.in); 
Scanner input2 = new Scanner(System.in); 

input1.nextInt(); 
input2.nextLine(); 

oder nextLine verwenden den Integer-Wert zu lesen und wandelt es in int später, so dass Sie den neuen Zeilenwert später nicht mehr benötigen.

6

Der Grund, warum es hier notwendig ist, ist, was passiert, wenn der Eingang ausfällt.

Zum Beispiel versuchen, den input.nextLine() Teil zu entfernen, das Programm erneut aus, und wenn es für die Eingabe fragt, geben Sie abc und drücken Return

Das Ergebnis wird eine Endlosschleife sein. Warum?

Weil nextInt() versuchen wird, den eingehenden Eingang 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 wird immer noch abc im Puffer sein. Wenn man also zur Schleife zurückkehrt, wird es versuchen, dieselbe abc immer wieder zu analysieren.

Mit nextLine() wird der Puffer gelöscht, so dass die nächste Eingabe, die Sie nach einem Fehler gelesen haben, die neue Eingabe nach der fehlerhaften Zeile ist, die Sie eingegeben haben.

+0

danke, so nextLine() nicht nur klar "\ n", sondern auch klar " ABC"?? –

+0

Ja. Es liest alle Zeichen bis einschließlich des Zeilenendes und gibt die Zeile zurück. Die zurückgegebene Zeichenfolge schließt das Zeilenende aus, aber Sie interessieren sich in diesem Fall nicht für den Rückgabewert, sondern nur für das, was es verbraucht, also für die gesamte Zeile. – RealSkeptic

Verwandte Themen