为什么这个while循环结束了呢?

时间:2013-06-26 00:51:47

标签: java while-loop

import java.io.*;
import java.util.Scanner;

public class Solve {
    public static void main(String[] args) {
        int max = 10;
        int i = 0;
        long record = 100000;
        while (i != 100) {
            int x = (int) (Math.random() * max) + 1;
            int y = (int) (Math.random() * max) + 1;
            int solution = x + y;
            long startTime = System.currentTimeMillis();

            while (i != solution) {
                System.out.println("Enter the solution to " + x + "+" + y);
                Scanner sc = new Scanner(System.in);
                i = sc.nextInt();
                if (i != solution) {
                    System.out.println("Incorrect");

                } else {
                    System.out.println("Correct!");
                }
                long endTime = System.currentTimeMillis();
                System.out.println("You took: " + (endTime - startTime) + "ms");

                if (endTime - startTime < record) {
                    record = endTime - startTime;
                    System.out.println("New record time: " + record + "ms");
                }
            }
        }
    }
}

此程序会产生一个简单的添加问题,并要求用户输入答案。它还跟踪正确回答问题所需的时间。我试图允许用户通过为i输入100来结束第一个while循环,但是有更好的方法来结束这个循环吗?

2 个答案:

答案 0 :(得分:2)

从不突破内部while循环。您的执行路径将被卡在那里。快速修复是调整内循环的循环约束:

while (i != solution && i != 100)

答案 1 :(得分:1)

除非100也是解决方案,否则它永远不会退出内部循环。最简单的解决方法是在用户输入100时突破该循环,例如:

i = sc.nextInt();
if (i == 100) break; // add this line
if (i!=solution) ...

这样,你将退出内循环,不断检查正确的答案,然后外循环也将退出。

可能有更好的方法来表明用户已经完成但这足以满足的情况,因为数字永远不会总和为100.如果您打算使用更高的数字 总和为100,你可能想考虑使用-1作为哨兵(如果你到达结果为负的点,你必须调整为孔)。

您可能还想向用户说明100是哨兵值,这样他们就不会猜测如何退出该程序:

System.out.println ("Enter the solution to " + x + "+" + y + " or 100 to exit");