1

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

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 enter the wrong type?

在实际读取输入之前使用hasNextInt(),我尝试将这个检查放在 while 循环中的同一个地方,n<=0就像这样

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

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

4

4 回答 4

5

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

public boolean parseWithFallback(String text) {
try {
  Integer.parseInt(text);
  return true;
} catch (NumberFormatException e) {
 return false;
 } 
}
于 2013-11-05T18:25:37.190 回答
3

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

希望下文能解决您的问题。

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);
}
于 2013-11-05T18:32:49.073 回答
1

在尝试获取下一个 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;
    }
  }
}
于 2013-11-05T18:24:21.730 回答
0

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

    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 个继承 Exception 类的类 NotIntUserInputException 和 NotPositiveIntUserInputException

于 2018-11-04T14:45:04.277 回答