此代码可以正常工作:
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");
}
答案 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");
您还应该知道,只需几微秒就可以完成循环,这样您就可以获得巨大的输出。