2016-05-20 7 views
0

exceptionを印刷する前に、コンソール出力がメニューをもう一度表示する理由が分かりますか? 処理の流れ

は出力を除いて、私は次のようになります。しかし

1. item 1 
2. item 2 
3. Quit 
Please choose a item: 
WRONGINPUT   <---- user input 
Invalid input  <---- where I want the exception shows 
1. item 1 
2. item 2 
3. Quit 
Please choose a item: 

、私が得るものです:

1. item 1 
2. item 2 
3. Quit 
Please choose a item: 
WRONGINPUT   <---- user input 
1. item 1 
2. item 2 
3. Quit 
Please choose a item: 
Invalid input  <---- why the exception is shown here? 

コードを以下に示します。

// code omitted 

    Scanner scanner = new Scanner(System.in); 
    int mainMenu = -1; 
    do {  
     try { 
      System.out.println("1. item 1"); 
      System.out.println("2. item 2"); 
      System.out.println("3. Quit"); 
      System.out.println("Please choose a item:"); 
      mainMenu = scanner.nextInt(); 
     } catch (InputMismatchException e) { 
      scanner.nextLine(); 
      System.err.println("Invalid input");   
     } 
      if (mainMenu == 1) 
       // do something 
      else if (mainMenu == 2) 
       // do something 
      else if (mainMenu == 3) 
       System.out.println("Quitting..."); 
    } while (mainMenu != 3); 

console output

+0

あなたは 'scanner'の初期化を追加できますか? – TDG

+0

'scanner 'の初期化は' do-while'ループの上にあります。しかし、まだこの不正な流れを持っていた – Matt

+0

@TDGうん、私はEclipseからそれを走った。上記の出力画面を添付しました。 – Matt

答えて

0

彼このプログラムを実行してください。

package java7.demo; 

import java.util.ArrayList; 
import java.util.InputMismatchException; 
import java.util.List; 
import java.util.Scanner; 

public class Test { 

    public static void main(String args[]){ 
     int mainMenu = -1; 
     Scanner scanner = new Scanner(System.in); 

    do {  
     try { 
      System.out.println("1. item 1"); 
      System.out.println("2. item 2"); 
      System.out.println("3. Quit"); 
      System.out.println("Please choose a item:"); 
      mainMenu = scanner.nextInt(); 
      if (mainMenu == 1){ 
       // do something 
      } 
      else if (mainMenu == 2){ 

      } 
       // do something 
      else if (mainMenu == 3){ 
       System.out.println("Quitting..."); 
      }else{ 
       throw new InputMismatchException(); 
      } 
     } catch (InputMismatchException e) { 

      System.err.println("Invalid input"); 
      scanner.nextLine(); 
     } 

    } while (mainMenu != 3); 
    } 
} 

err print文の下でscanner.nextLine()を変更する必要があります。

+0

いいえ、Eclipseで実行しても差はありません。 – Matt

+0

私はあなたのために新しい画像のスクリーンショットを追加しました。あなたが見たいと思う答えである私のコンソールを見てください。 – sawyinwaimon

0

コマンドで実行すると、自分のコードの順序に問題はありません。

私は、その理由がEclipseでSystem.err.printlnの問題であることがわかりました。 System.out.printlnに変更すると、正しい出力順序が得られます。しかし、Eclipseではこれが問題であるため、必要ではないと思います。

Console Printing Order in Eclipse

このリンクは、私に理由を与えます。とにかく助けてくれてありがとう。乾杯する

関連する問題