在分配int变量之前检查用户输入(扫描仪)

时间:2014-11-07 01:36:07

标签: java java.util.scanner

int i;
Scanner scan = new Scanner(System.in) {
i = scan.nextInt();
}

我想要做的是在用户输入字符而不是整数时捕获扫描程序中的错误。我尝试了下面的代码,但最终要求另一个用户输入(因为在验证第一个scan.nextInt()之后调用另一个scan.nextInt()为i分配值):

int i;
Scanner scan = new Scanner(System.in) {

    while (scan.hasNextInt()){
    i = scan.nextInt();
    } else {
    System.out.println("Invalid input!");
    }
}

1 个答案:

答案 0 :(得分:1)

你的逻辑看起来有些偏差,如果它没有效,你必须消耗一个输入。此外,你的匿名块看起来很奇怪。我想你想要像

这样的东西
int i = -1; // <-- give it a default value.
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) { // <-- check for any input.
    if (scan.hasNextInt()) { // <-- check if it is an int.
        i = scan.nextInt(); // <-- get the int.
        break; // <-- end the loop.
    } else {
        // Read the non int.
        System.out.println("Invalid input! " + scan.next()); 
    }
}