首页 > 解决方案 > 移回迭代时,while循环变为无限

问题描述

使用while循环提示用户输入3个整数来平均它们,当输入不是整数时需要重新提示,所以我决定在输入不是整数时后退一步,但是当我输入一个非 int 时,就好像它一直处于它不是 int 的状态,并继续重新提示,而不重新检查新的输入。

  Scanner scnr = new Scanner(System.in);

    String prompt = "Type an integer: ";
    int num = 0;
    int i = 0;
    while (i < 3) {
        System.out.print(prompt);
        if (scnr.hasNextInt()) {
            int input = scnr.nextInt();
            num += input;
        } else i -= 1;

        i += 1;
    }
    
     double average = num / 3.0;
    System.out.println("Average: " + average);

标签: javawhile-loop

解决方案


hasNextInt()true仅当 int 已经存在时才返回——它实际上并没有得到输入。这就是你的电话nextInt()正在做的事情。但它永远不会被调用,因为hasNextInt()它总是错误的,因为你从未真正接受过用户输入,所以ielse块中递减,然后永远递增。

另一种方法是使用 try/catch 块nextInt()来获取下一个输入值,如果捕获到异常则后退(意味着输入不是 int)。


推荐阅读