2011-12-08 10 views
1

Javaで書かれた次のコードを取る:なぜ私のswitch文からそのような奇妙な動作ですか?

入力レイアウトタイプ::入力レイアウト名:

私はプログラムを実行すると、私は次の取得

choice = keyboard.nextByte(); 

     switch (choice) 
     { 
      case (byte) 4: 
       System.out.print("Input the layout type: "); 
       layoutType = keyboard.nextLine(); 
       System.out.print("Input the layout name: "); 
       layoutName = keyboard.nextLine(); 
       break; 
      default: 
       break; 
     } 

を私は一度に両方の入力を促されます!何故ですか?プログラムは "keyboard.nextLine()"のところで停止するべきではありませんか? switchステートメントの外側では実行されますが、内部では実行されません。 switch文の中で入力を促すメッセージが表示されるのはなぜですか?

=================================== UPDATE:

はい、そうです。 keyboardjava.util.Scannerクラスのインスタンスです。

+1

キーボードは何ですか? – korifey

+1

'keyboard'オブジェクトの宣言を表示できますか? – jefflunt

+0

質問が不明な箇所があります。 2番目に、CaseはIntでなければなりません。それはBYTEではいけません。BYTE –

答えて

2

これは、バイトを読み取るために改行を入力しているためです。改行は、後でreadLine()を呼び出すための入力とみなされます。これを解決するためにreadByte()readLine()ダミーを追加します。

choice = keyboard.nextByte(); 
keyboard.readLine(); // dummy readline 
1

keyboardjava.util.Scannerの対象であると仮定すると、問題は次のようにあります。

最初に、nextByte()を使用してバイトを読み取るので、バイト値のみが入力として取得されます。残りの値は、ここでは改行文字が入力ストリームに残ります。入力としてkeyboard.nextLine()によって読み取られ、戻されます。したがって、その行は空の文字列を返します。したがって、新しい行を破棄するために、nextLine()コールを追加するとよいでしょう:

System.out.print("Input the layout type: "); 
keyboard.nextLine(); 
layoutType = keyboard.nextLine(); 
System.out.print("Input the layout name: "); 
layoutName = keyboard.nextLine();