-1

我的代码有点问题:

    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()顺便说一句,只显示一堆字符串。

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

4

2 回答 2

1

while如果您输入,您将在循环中读取 2 个输入value > 5。第一个值是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();
于 2013-10-25T18:06:57.823 回答
1

在do块内声明Scanner或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();
    }
于 2013-10-25T18:07:04.987 回答