【问题标题】:Validate User Input, check if input is positive number and not string of characters验证用户输入,检查输入是否为正数而不是字符串
【发布时间】:2018-08-18 08:14:23
【问题描述】:

我正在尝试编写一个可以在进入下一部分之前验证用户输入的程序,但我目前对此感到困惑。每当我先输入负值时,它将绕过条件或崩溃。

如果我输入“A”,它将显示“请输入有效数字”

如果我输入“-1”,它会显示“请输入一个正数”

但是在我输入-1后不久,如果我输入另一个负值,它会绕过条件并接受负值,而输入字符会导致程序崩溃。

我想在这里实现一个程序,可以

判断Input是否为数字而非字母或字符串,判断是否为正数

public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  int Users = 0;
  boolean isNumber;
  System.out.print("Enter the number of Users ");
  do {
    if (input.hasNextInt()) {
      Users = input.nextInt();
      isNumber = true;
      if (Users < 0) {
        System.out.print("Please enter a positive number ");
        Users = input.nextInt();
      }
    } else {
      System.out.print("Please enter a valid number ");
      isNumber = false;
      input.next();
    }
  } while (!(isNumber));
}

【问题讨论】:

    标签: java validation input


    【解决方案1】:

    如果 isNumber 小于 0,则不会将 False 设置为另一个数字,它不会检查它是否为负,因为isNumber 将是True,这意味着while 循环将不再运行。

    要解决此问题,请将 isNumber = False; 添加到 if (Users&lt;0){ 代码块的末尾。

    【讨论】:

      【解决方案2】:

      我发现您的代码存在三个问题。第一个是 isNumber 被设置为 true 即使输入是负数,所以我建议您仅在验证它不是负数后才将其设置为 true。

      第二个问题是在你的if (Users &lt; ) { ... } 块中,你得到了input.nextInt()。您真的应该只进入 do-while 循环的下一次迭代,并在下一次迭代中获取下一个输入。

      第三,你应该将isNumber初始化为false

      试试这个代码:

      public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int Users = 0;
        boolean isNumber = false;
        System.out.print("Enter the number of Users ");
        do {
          if (input.hasNextInt()) {
            Users = input.nextInt();
            if (Users < 0) {
              System.out.print("Please enter a positive number ");
              // Remove this line:
              // Users = input.nextInt();
            } else {
              // Moved this to an else block:
              isNumber = true;
            }
          } else {
            System.out.print("Please enter a valid number ");
            // remove this because it's already initialized to false:
            // isNumber = false;
            input.next();
          }
        } while (!(isNumber));
      }
      

      【讨论】:

        猜你喜欢
        • 2022-06-17
        • 2023-03-27
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2011-07-22
        相关资源
        最近更新 更多