【问题标题】:Checking if the input value is integer type java检查输入值是否为整数类型 java
【发布时间】:2013-11-16 17:30:29
【问题描述】:

我要求用户输入他需要写入整数的位置。我设法创建了验证,检查该值是否高于所需的值,因此,使用此代码:

int n = sca.nextInt(); 
while (n<=0){
    System.err.println(error_1);
    n = sca.nextInt(); 
}                    

但是现在如何添加检查字符串,我找到了这样的解决方案How do I keep a Scanner from throwing exceptions when the wrong type is entered?

在实际读取输入之前使用hasNextInt(),我尝试将此检查放入while循环中与n&lt;=0这样的位置相同

while ( (n<=0)||(sca.hasNextInt() )) {
  ....
}

但它以变量n 与该方法不兼容的错误响应。 那么有没有办法克服这种情况呢?

【问题讨论】:

  • 我们能得到确切的错误信息吗? (如果可能的话,一个小而完整的例子仍然可以显示你的问题)
  • “变量 n 与该方法不兼容”:我确信这不是确切的错误消息。你得到了什么?
  • @Dennis Meng 对不起,伙计们,但我无法重现错误。有没有办法找到以前的编译错误?
  • 你能重现错误吗?如果没有,那么这些都将无济于事。

标签: java validation input


【解决方案1】:

您可以根据需要多次请求和验证用户输入以确保正确操作。

    private int readUserInput(String messageToUser) {
    System.out.print("Enter " + messageToUser);
    Scanner scan = new Scanner(System.in);
    boolean validInput = false;
    int res = 0;
    do {
      try {
        validInput = scan.hasNextInt();
        if (!validInput) {
          throw new NotIntUserInputException();
        }
        res = scan.nextInt();
        if (res < 1) {
          validInput = false;
          throw new NotPositiveIntUserInputException();
        }
      } catch (Exception e) {
        System.out.print(e.getMessage());
        scan.next();
      }
    } while (!validInput);
    return res;
  }

您必须创建 2 个继承异常类的类 NotIntUserInputException 和 NotPositiveIntUserInputException

【讨论】:

    【解决方案2】:

    如果不检查输入是否为int 类型,首次调用nextInt() 也会导致异常。

    希望以下内容能解决您的问题。

    Scanner sca = new Scanner(System.in);
    
    boolean incorrectInput = true;
    int userInput = -1; // initialize as a negative  
    
    while (incorrectInput) {
    
        if (sca.hasNextInt()) {
            int n = sca.nextInt();
            if (n < 0) {
                System.err.println("error_1");
            } else {
                // do anything else
                userInput = n;
                incorrectInput = false;
            }
        } else {
            sca.next();
        }
    }
    
    if (!incorrectInput) {
        System.out.println("UserInput = " + userInput);
    }
    

    【讨论】:

    • @Ikamal IT 差不多了,只需要解决此代码下方的程序方法无法访问 n 变量 :(但无论如何感谢这个
    • @Ikamal 有什么想法吗,因为我尝试更改 n 变量位置,但没有成功;(
    • @EdgarsRozenfelds 更新了代码以允许使用名为 userInput 的新变量访问 while 循环之外的用户输入。
    【解决方案3】:

    在尝试获取下一个 Int 之前,您必须测试是否有下一个 Int。

    boolean finished = false;
    while(!finished){
      while(scan.hasNextInt()){
        int n = sca.nextInt(); 
        if(n <= 0){
          System.out.println("Error: Number smaller 0");
        } else {
          System.out.println("correct!");
          finished = true;
        }
      }
    }
    

    【讨论】:

    • 看起来不错,但是在您从未得到整数的地方,我需要再次调用输入,根据用户插入正确数据的需要多次。
    • 将您的扫描仪置于另一个 while 循环中,重复直到您获得正确的整数。
    【解决方案4】:

    您可以使用 parseInt 并检查异常:

    public boolean parseWithFallback(String text) {
    try {
      Integer.parseInt(text);
      return true;
    } catch (NumberFormatException e) {
     return false;
     } 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多