循环无限

时间:2013-09-02 16:43:52

标签: java for-loop while-loop infinite-loop

此代码可以正常工作:

public class Main {

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        long endTime = startTime + 60000;
        long index = 0;

        while (true) {
            double x = Math.sqrt(index);
            long now = System.currentTimeMillis();
            if (now > endTime) {
                break;
            }

            index++;
        }
        System.out.println(index + " loops in one minute.");
    }
}

然而,我尝试将其重写为for loop,然后陷入无限循环。

public class Main {

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        long endTime = startTime + 60000;

        int i = 0;
        for (long now = 0; now < endTime; i++) {
            Math.sqrt(i);
            now = System.currentTimeMillis();
            System.out.println("now" + now);
            System.out.println("end" + endTime);
        }
    }

    System.out.println(i+"calculations done in one minute");
}

2 个答案:

答案 0 :(得分:3)

你的第二个例子不是无限循环,只需等待1分钟。

long endTime = startTime + 60000;

将endTime设置为60000毫秒,即60秒,即1分钟。

标准输出只是打印得非常快。

在循环中放置一个Thread.sleep(1000L),您将看到在结束前打印的61个语句。

long endTime = 1378140843604L; // for example
for (long now = 0; now < endTime; i++) {
    now = System.currentTimeMillis(); // will be 1378140783604, 1378140784604, 1378140785604 and so on
    System.out.println("now" + now); 
    System.out.println("end" + endTime);
    Thread.sleep(1000L);
}

答案 1 :(得分:0)

这对我有用:

public class Main {

public static void main(String[] args) {
    long startTime = System.currentTimeMillis();
    long endTime = startTime + 60000;

    int i = 0;
    for (long now = 0; now < endTime; i++) {
        Math.sqrt(i);
        now = System.currentTimeMillis();
        System.out.println("now" + now);
        System.out.println("end" + endTime);
    }

    System.out.println(i+"calculations done in one minute");
}
}

我和你之间的唯一区别在于我把它放在哪里:(你的主要方法之外)

System.out.println(i+"calculations done in one minute");

您还应该知道,只需几微秒就可以完成循环,这样您就可以获得巨大的输出。