整数的扫描程序验证不能正常运行

时间:2013-10-25 18:00:23

标签: java

我的代码遇到了一些麻烦:

    int item = -1;
    Scanner input = new Scanner(System.in);
    do {
        while (!input.hasNextInt() || input.nextInt() > 5) {
            System.out.println("Enter a valid integer!");
            getMenu();
            input.next();
        }
        item = input.nextInt();
    } while (item <= 0);
    input.close();

如果我输入的数字低于5,那就有效。如果我输入6,它表明我必须输入一个有效的整数。当我再次尝试输入6时没有任何反应,但是当我再次输入6时,它会再次显示该消息。我认为这与input.next()有关,但不太确定原因。

有什么想法吗?

getMenu()只显示一串字符串btw。

换句话说。用户必须输入1到5之间的有效整数。如果用户不这样做,他将遍历要求输入有效整数的代码块。用户将循环,直到他输入有效的整数。

2 个答案:

答案 0 :(得分:1)

如果您输入while,则会在value > 5循环中阅读2个输入。第一个值由scan.nextInt()本身读取。然后循环内的scan.next()也会读取一个标记。

因此,第一次通过6时,while循环条件将得到满足,然后scan.next()将等待输入。然后,6读取您第二次传递scan.next()

此外,您无法从循环中删除scan.next(),因为如果scan.hasNextInt()条件变为false,则scan.nextInt()将无法读取输入,然后你的循环将变为无限,因为hasNextInt()将继续测试相同的输入。

要解决此问题,请从while循环中删除第二个条件:

int item = -1;
Scanner input = new Scanner(System.in);

do {
    System.out.println("Enter integer value between [1,5]");

    while (!input.hasNextInt()) {  // iterate until invalid input is passed
        System.out.println("Enter a valid integer!");
        input.next();   // Read the invalid input to move the cursor ahead
    }
    item = input.nextInt();  // Valid input found, read it in `item`

} while (item <= 0 || item >= 6);

System.out.println(item);
input.close();

答案 1 :(得分:1)

执行块或 flush()内声明扫描程序或使用 nextLine()冲洗它

do {
    Scanner input = new Scanner(System.in);
    while (!input.hasNextInt() || input.nextInt() > 5) {
        System.out.println("Enter a valid integer!");
        //OR String a = input.nextLine():
        getMenu();
        input.next();
    }