2016-06-14 15 views
0
int choice = 0; 

    while ((choice != 1) || (choice !=2)){ 

     System.out.println("1. Option 1"); 
     System.out.println("2. Option 2"); 

     try{ 

     choice = scanner.nextInt(); 

     } 

     catch(InputMismatchException e){ 
      System.out.println(e); 
     } 

     if (choice == 1){ 
      System.out.println("Option 1"); 
      break; 
     } 

     if (choice == 2){ 
      System.out.println("Option 2"); 
      break; 
     } 

     System.out.println("Please enter a valid choice."); 

    } 

非intが入力された場合を処理しようとしています。なぜこれが無限ループに陥るのでしょうか? try catchブロックを追加しようとするとうまくいきました。無限ループを引き起こすJavaエラー処理

+0

であなたのtryキャッチを置き換えるしかし、その後のプログラムは、あなたが別の値で入力することができますので、私は戻ってループにそれをしたい、終了。 – unskilledidiot

+1

改行トークンを使用する必要があります。 http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methodsを参照してください。 –

答えて

0

whileループ内でエラーをトラップし、エラーがキャッチされたときにループを終了する条件を設定しないため、終了しないようにします。

whileループに別の条件を追加してエラー時に終了するか、エラーが発生したときに1または2に設定します。エラーが検出されたときに中断します。

int choice = 0; 

    while ((choice != 1) || (choice !=2)) { 
     System.out.println("1. Option 1"); 
     System.out.println("2. Option 2"); 

     try{ 
     choice = scanner.nextInt(); 
     } catch(InputMismatchException e) { 
     System.out.println(e); 
     } 
     switch(choice) { 
     case 1: 
     System.out.println("Option 1"); 
     break; 
     case 2: 
     System.out.println("Option 2"); 
     break; 
     default: 
     System.out.println("Please enter a valid choice."); 
     break; 
     } 
    } 
+0

こんにちは、私はそれがエラーがキャッチされたときにそれがループの先頭に戻り、適切な値を入力できるようにしたいと思います。これどうやってするの? – unskilledidiot

+0

エラーが発生した場合はエラーを表示し、エラーが検出された場合はエラーを表示し、フラグをクリアしてやり直してください。 – SPlatten

0

try{ 
    choice = Integer.parseInt(scanner.next()); 

} catch(NumberFormatException e){ 
    System.out.println("Enter a valid choice"); 
} 
関連する問題