2017-12-15 39 views
0

ランダムロール番号を1 &の間で出力するゲームを作成しました。システムは、ユーザーが1秒間以上[1]またはそれ未満の[2]を推測するかどうかをユーザーに確認しますロール番号。彼らの推測に基づいて、システムは "Draw!"、 "あなたは間違って推測する"のいずれかを印刷します。または "あなたは正しく推測しました"。その後、プログラムは、whileループを使用してプログラムを再起動するかどうか(yes [y])をユーザーに促します。ユーザー入力の検証 - hasnext()while

しかし、現在、[1]/[2]だけを入力できるように、整数 '推測'ユーザー入力を検証しようとしています。 whileループを使ってhasNext()メソッドを使ってこれらの条件を設定するのは難しいです。私のプログラムは、正しいまたは間違ったユーザ入力時にwhileループを挿入した後には、今は続行しません。

を参照してください「//無効なユーザーのエントリ」ブロック

コード:

public static void main(String args[]) { 
    String replay = "y"; 
    Scanner input = new Scanner (System.in); 
    while(replay.equals("y")) 
    { 

     //roll one 
     int rNum1 = (int)(Math.random() * 11); //declare random roll one, gives result between 1 and 10 

     //print roll one 
     System.out.println("You roll the 10-sided die."); 
     System.out.println("It lands on " + rNum1 + "."); 
     System.out.println(); //space 

     //User guess 
     System.out.println("Will a second die roll higher or lower?"); 
     System.out.println("To guess higher enter [1], or to guess lower, enter [2]."); 

     //roll two 
     int rNum2 = (int)(Math.random() * 11); //declare random roll two 
     int guess = input.nextInt(); //user's guess/HiLo 

     //invalid user entry 
     while(!input.hasNextInt() || (guess != 1 && guess != 2)) 
     { 
      System.out.println("Invalid entry"); // print incorrect guess entry input 
      System.out.println("To guess higher enter [1], or to guess lower, enter [2]."); 
      input.next(); //reset scanner "input" 
     } 

     //print roll two 
     System.out.println(); //space 
     System.out.println("You roll the die again."); 
     System.out.println("It lands on " + rNum2 + "."); 
     System.out.println(); //space 


     if (guess == 1) //guessed higher 
     { 
      if (rNum1 == rNum2) 
      { 
       System.out.println("Draw!"); 
      } 
      else if (rNum1 > rNum2) 
      { 
       System.out.println("You guessed wrongly."); 
      } 
      else 
      { 
       System.out.println("You guessed correctly!"); 
      } 
     } 

     if (guess == 2) //guessed lower 
     { 
      if (rNum1 == rNum2) 
      { 
       System.out.println("Draw!"); 
      } 
      else if (rNum1 > rNum2) 
      { 
       System.out.println("You guessed correctly!"); 
      } 
      else 
      { 
       System.out.println("You guessed wrongly."); 
      } 
     } 
     System.out.println("Would you like to play again? Enter [y] for yes."); 
     replay = input.nextLine(); 
    } 
} 

答えて

0

ちょうど推測の値をチェックし、それが満たされていない場合の要件は、この

int guess = input.nextInt(); //user's guess/HiLo 

    //invalid user entry 
    while(guess != 1 && guess != 2) 
    { 
     System.out.println("Invalid entry"); // print incorrect guess entry input 
     System.out.println("To guess higher enter [1], or to guess lower, enter [2]."); 
     guess = input.nextInt(); //reset scanner "input" 
    } 
のように再び尋ねます

このようなものは、ユーザーが入力した行全体を取得して桁と一致するかどうかを確認するために入力されたものに対して機能します。そうであれば、入力を整数に解析し、 1または2ではなく、ユーザが1または2の所望の値を入力するまで入力を要求する。

 int guess = 0; 
     while(guess != 1 && guess != 2) 
     { 
      String inputFromUser = input.nextLine(); 
      if(inputFromUser.matches("\\d+")) 
      { 
       guess = Integer.parseInt(inputFromUser); 
       if(guess != 1 && guess != 2) 
        System.out.println("Value must be either a 1 or 2"); 
      } 
      else 
       System.out.println("Invalid entry"); 
     }