2017-12-05 11 views
-1

私は数(1-10)を選択してユーザーに推測されるプログラムを作成するプロジェクトを持っています。彼らがあまりにも高い場合、それはそう言い、あまりにも低いと推測すれば同じことが起こります。今度は間違いを防ぐために、私はtryとcatchブロックを追加する必要があります。コードを見ると、私が持っていることがわかりますが、コードがトリガされたときにキャッチが終了します。どのようにループバックさせるのですか?try-catchをwhileループにループバックJava

import java.util.*; 
    import java.lang.*; 

    class GuessDR { 

     public static void main(String[] args){ 



      System.out.println("Welcome to my number guessing game!"); 

      int maxnum = 10; 
      Scanner input = new Scanner(System.in); 
      Random rand = new Random(); 
      int number = rand.nextInt(maxnum); 
      int tries = 0;   
      int guess; 
      boolean win = false; 

      try{ 

       while (win == false){ 



        System.out.println("Guess a number between 1 and "+      
        maxnum +": "); 
        guess = input.nextInt(); 
        tries++;  
        if (guess == number){ 
         win = true; 
        } 

        else if(guess < number){ 
         System.out.println("Number is to low, tray again"); 

        } 

        else if(guess > number){ 
         System.out.println("Number is to high, try again"); 

        } 

       } 
      } 

      catch (InputMismatchException e) { 

       System.out.println("Enter numerical guess");    

      } 
    System.out.println("You win!"); 
    System.out.println("It took you "+ tries + " tries."); 

    } 
} 
+0

whileループ内でtry-catchブロックを移動してみてください。 – AJNeufeld

+0

簡単な方法ですか? 'try'と' catch'ビットをループに移動します。 :P – cHao

+0

次の質問を予期して(新しい推測では 'InputMismatchException'が生成され続けます)、[この質問と回答](https://stackoverflow.com/questions/29811339/cannot-figure-out-how-to- catch-inputmismatcheception) – AJNeufeld

答えて

1

バッファから無効な入力をクリアするだけで、whileループへのtry-catchを移動しても、あなたのcatchブロック内の適切input.nextLine()方法を提供する:whileループに

import java.util.*; 
    import java.lang.*; 

    class GuessDR { 

     public static void main(String[] args) { 

      System.out.println("Welcome to my number guessing game!"); 

      int maxnum = 10; 

      Random rand = new Random(); 
      int number = rand.nextInt(maxnum); 
      int tries = 0; 
      int guess; 
      boolean win = false; 
      Scanner input = new Scanner(System.in); 

      while (win == false) { 
       try { 

        System.out.println("Guess a number between 1 and " + maxnum + ": "); 
        guess = input.nextInt(); 
        tries++; 
        if (guess == number) { 
         win = true; 
        } 

        else if (guess < number) { 
         System.out.println("Number is to low, tray again"); 

        } 

        else if (guess > number) { 
         System.out.println("Number is to high, try again"); 

        } 

       } catch (InputMismatchException e) { 
        input.nextLine(); 
        System.out.println("Enter numerical guess"); 

       } 
      } 

      System.out.println("You win!"); 
      System.out.println("It took you " + tries + " tries."); 

     } 
    } 
+0

ああ、私のコードは大丈夫だと思われる - 私は無限ループを防ぐためにScannerをwhileループに動かすことについて言及しなかった。適切な編集をするために私の方法で。 –

+0

私はあなたとは違う何かをしたに違いありません。私はもともとそれをやってみた。ただし、無限ループが発生しました。あなたのコードをコピーし、それは正常に動作します。 –

+0

私の答えが正しいと思うなら、それをアップヴォーヴし、それを受け入れるために左側にチェックしてみてください。 –

0

移動はのtry-catchと無限ループを予防するためにスキャナを扱います。確認してください:https://stackoverflow.com/a/3572233/5964489

while (win == false) 
     { 

      System.out.println("Guess a number between 1 and " 
        + maxnum + ": "); 
      try 
      { 
       guess = input.nextInt(); 
       tries++; 
       if (guess == number) 
       { 
        win = true; 
       } else if (guess < number) 
       { 
        System.out.println("Number is to low, tray again"); 

       } else if (guess > number) 
       { 
        System.out.println("Number is to high, try again"); 

       } 

      } catch (InputMismatchException e) 
      { 
       System.out.println("Enter numerical guess"); 
       input.next(); 
      } 
     }