2017-09-14 8 views
0

私は完全にプログラミングに新しいですし、私はInputMismatchExceptionをキャッチするときに私のメインdo whileループに戻ることができない問題に直面しました。 Googleを検索したところ、ユーザーが提供するソリューションを見つけて完全に理解することはできません。どのように延長する... whileループ例外の後にキャッチ

私の目標は、ユーザーが終了申請をする可能性のある文字を入力する可能性を排除することです。だから私はtry/catchでほぼすべてのコードを囲んだ。

は、私は自分のコードに複数のループを入れてみましたし、それがすべてでは2通りの方法で終了します。

  1. 私のループは、catch文に到達した後に終了したことがありません。
  2. 私はコンソールに戻って、何も起こりません(私はまだそこに入力することができます)。

誰かが自分の目標に到達する方法を説明できますか?私もhasNextIntを試してみましたが、適切な値を入力するようにもう一度尋ねることを望んでいますが、それはしません。私は間違って何をしていますか?私はアプリケーションをデバッグし、私が見ることができるのは、プロシージャがコードの終わりまでスキップされるということです。

Scanner scanner = new Scanner(System.in); 

System.out.print("\nChoose mode: "); 

int userInput = 0; 

do { 
    do { 
     try { 
      userInput = scanner.nextInt(); 
      switch (userInput) { 
       case 1: 
        Mode_1.multiplyTwoInteger(); 
        break; 
       case 2: 
        Mode_2.multiplyTwoSpecifiedValues(); 
        break; 
       case 3: 
        System.out.println("\nYou quit application. Goodbye :)"); 
        return; 
       default: 
        System.out.print("Not found! Choose again game mode: "); 
      } 
     } catch (Exception InputMismatchException) { 
      System.out.print("Wrong input!\nChoose again:"); 
     } 
    } while (userInput <= 0 || userInput > 3); 
} while (userInput != 3); 

答えて

0

あなたは、この例外を取得すると、あなたのコンソールは、この例外が存在しており、nextInt()が悪いフォーマットとしてそれを読みますとInputMismatchExceptionを与えるだろう。

スキャナキャッチブロックのオブジェクトスキャナ=新しいスキャナ(System.in);か、悪い入力を読み取ることができますscanner.nextLine()

は、以下のように一致するようにコードを変更してみてください:

try { 
        userInput = scanner.nextInt(); 
        switch (userInput) { 
         case 1: 
          Mode_1.multiplyTwoInteger(); 
          break; 
         case 2: 
          Mode_2.multiplyTwoSpecifiedValues(); 
          break; 
         case 3: 
          System.out.println("\nYou quit application. Goodbye :)"); 
          return; 
         default: 
          System.out.print("Not found! Choose again game mode: "); 
        } 
       } catch (Exception InputMismatchException) { 
        scanner=new Scanner(System.in); // Reinitiate the scanner object or use scanner.nextLine() to read bad input. 
        System.out.print("Wrong input!\nChoose again:"); 
       } 
+0

私には新しい知識であること。私はそれがこのように動作するのか分からなかった。解決に感謝します。 – Ahlen

関連する問題