【问题标题】:Looping user input until a positive nonzero integer is entered循环用户输入直到输入一个正的非零整数
【发布时间】:2021-09-09 18:01:12
【问题描述】:

我是一个完整的初学者,我正在尝试创建一个 while 循环,该循环不断询问用户输入,直到它得到一个正的非零整数,然后继续下一部分。到目前为止,这是我所得到的:

System.out.println("Enter the speed of the vehicle in "
            + "miles per hour: ");
    while (keyboard.hasNext())
    {
        if (keyboard.hasNextInt())
        {
            speed = keyboard.nextInt();
            while (speed <= 0)
            {
                System.out.println("Please enter a positive nonzero number: ");
                speed = keyboard.nextInt();
            }
        }
        else
        {
            System.out.println("Please enter a number: ");
            speed = keyboard.nextInt();
        }
    }

现在,当我运行它并输入除整数以外的任何内容时,它会打印出“请输入一个数字”这一行,但随后我立即收到 InputMatchException 错误并且构建失败。如果我输入一个负数或零,它会提示我输入一个正数,直到我输入一个正数,但随后代码会停止执行并继续运行,同时无限期地什么都不做,而不是转到循环之后的部分,这只是从另一个系统开始。输出。提前感谢您的帮助。

【问题讨论】:

    标签: java validation input while-loop


    【解决方案1】:

    你可以这样做。通过使用Scanner#nextLine() 方法请求数值的字符串表示,然后应用带有小Regular Expression(正则表达式)的String#matches() 方法来验证提供了正数值的事实("\\d+" 表达式) ,例如:

    String speedString = "";
    while (speedString.isEmpty()) {
        System.out.println("Enter the speed of the vehicle in miles per hour: ");
        speedString = keyboard.nextLine().trim();
        if (!speedString.matches("\\d+") || Integer.valueOf(speedString) < 1) {
            System.err.println("Invalid speed value supplied!\n" 
                             + "Please enter a 'positive' non-zero number.\n");
            speedString = "";
        }
    }
    int speed = Integer.parseInt(speedString);  
    

    【讨论】:

      【解决方案2】:

      你需要消费之前输入的非int,然后尝试读取以下输入:

      else
      {
          System.out.println("Please enter a number: ");
          // consume and ignore the previous non-int input
          keyboard.next();
      }
      

      【讨论】:

      • 谢谢,这对错误消息起到了作用。你知道为什么它不会移动到下一个代码块吗?在这个块之后只有一个空行,然后对另一个用户输入重复同样的事情。
      猜你喜欢
      • 2020-08-15
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多