2016-10-20 4 views
1

Ich stieß auf ein Problem mit meinem Code, den ich glücklicherweise mit einer anderen ähnlichen Frage lösen konnte, aber ich bin neugierig, warum dies geschieht.Warum ignoriert nextInt()/n?

Hier ist eine vereinfachte Version meines Programms:

public static void main(String[] args){ 
    Scanner scan = new Scanner(System.in); 
    String input = scan.nextLine(); 

    while(!input.equals("x")){ 

     if(input.equals("m")){ 
      String temp = scan.nextLine(); 
      String entry = scan.nextLine(); 
     } 
     else if(input.equals("f")){ 
      String color = scan.nextLine(); 
      int nothing = scan.nextInt(); 
     } 

     System.out.println("Enter 'm' for mascara, 'f' for foundation, 'x' to exit"); 
     System.out.println("Entry? :"); 
     input = scan.nextLine(); 
    } 
} 

Mit diesem Code ‚m‘ eingegeben wird mir keine Probleme, sondern ‚f‘ bewirkt, dass mir unsere die beiden Zeilen zweimal drucken. Warum passiert das genau mit nextInt() und nicht mit nextLine()?

'm' 
Enter 'm' for mascara, 'f' for foundation, 'x' to exit 
Entry? : 
'f' 
Enter 'm' for mascara, 'f' for foundation, 'x' to exit 
Entry? : 
Enter 'm' for mascara, 'f' for foundation, 'x' to exit 
Entry? : 

Antwort

2

Warum ignorieren nextInt() \ n?

Es ignoriert es nicht. Es liest es einfach nicht .

In der Tat ist es die nextLine Methode, die die anomale hier ist. Die meisten der next-Methoden funktionieren, indem sie das nächste Token abrufen und dann versuchen, Token zu analysieren. das nächste Token immer bedeutet:

  1. alle führenden Begrenzungszeichen Überspringen (standardmäßig Leerzeichen)
  2. Lesen Zeichen bis zu, aber nicht einschließlich der nächsten Trennzeichen.

Die nextLine() Methode ist anders. Es liest einfach alle Zeichen bis einschließlich der nächsten Zeilenende-Sequenz.


1 - ... es sei denn, es ist einer der führenden Trennzeichen an dem Punkt ist, dass nextInt() genannt wird!

+0

Könnten Sie erläutern, was Sie meinen, wenn es eines der führenden Trennzeichen ist? –

+1

Ein Trennzeichen ist ein Zeichen, das die Token begrenzt. d. h. das Zeug zwischen den Token, die Sie ignorieren möchten. Ein vorangestelltes Trennzeichen ist ein Trennzeichen vor dem Token, das Sie lesen möchten. d. h. es "führt" es. (Und ein hinteres Trennzeichen ist ein Trennzeichen * nach * dem Zeichen.) –

+0

Ah, ich sehe jetzt. Danke für eine klare und prägnante Antwort. –

Verwandte Themen