【问题标题】:User Input Validation - hasnext() while用户输入验证 - haveext() while
【发布时间】:2018-05-29 04:03:34
【问题描述】:

我创建了一个游戏,它打印一个介于 1 和 10 之间的随机掷骰子号码。然后系统会询问用户他们是想猜测更高的 [1] 还是更低的 [2] 以获得第二个掷骰子号码。根据他们的猜测,系统将打印“抽奖!”、“您猜错了”。或“你猜对了。”。然后程序会提示用户是否要使用 while 循环重新启动程序(是 [y])。

但是,现在我正在尝试验证整数“猜测”用户输入,以便分别只能输入 [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();
    }
}

【问题讨论】:

    标签: java java.util.scanner do-while boolean-logic next


    【解决方案1】:

    只检查guess的值,如果不满足要求,再这样问

        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");
          }
    

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 2013-11-02
      • 2021-10-14
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2017-09-11
      相关资源
      最近更新 更多