2016-10-20 8 views
1

私は問題に遭遇しましたが、私は感謝して別の同様の質問で解決することができましたが、なぜこれが発生するのか不思議です。私はすべての問題を与えることはありません「M」を入力し、このコードでnextInt()を無視するのはなぜですか?

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(); 
    } 
} 

が、「F」は、私が二回我々の2つの行を出力するようになります:

は、ここに私のプログラムの簡易版です。なぜこれはnextInt()ではなく、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? : 

答えて

2

なぜnextInt()は、\ nを無視するのですか?

無視しません。それはただそれを読んでいない。

実際、ここでは異常な方法であるnextLineメソッドです。 nextメソッドのほとんどは、次のトークンを取得してトークンを解析しようとします。次のトークンを取得することを意味します

  1. は件まで文字を読みますが、次の区切り文字を含まない
  2. (デフォルト、空白文字で)すべての主要な区切り文字をスキップ。

nextLine()の方法が異なります。これは、次の行末シーケンスまでのすべての文字を読み込むだけです。


1 - ...それはnextInt()が呼び出された時点で有数の区切り文字の一つでなければ!

+0

それが主要な区切り文字の1つである場合、あなたが何を意味するかで詳しく説明できますか? –

+1

区切り文字は、トークンを区切る文字です。無視したいトークンの間のもの。先頭の区切り文字は、読みたいトークンの前にある区切り文字です。すなわち、それはそれを「導く」。 (そして後続の区切り記号は、トークンの後の区切り文字*です) –

+0

ああ、私は今参照してください。はっきりと簡潔な答えをありがとう。 –

関連する問題