3 回答
TA贡献1793条经验 获得超6个赞
我认为您误解了您的操作在做什么,因为它不是在计算毫秒,而是在计算彼此不miniIndex++相等的循环迭代次数。根据您想要发生的情况, 我已经修改了您的代码以每 5 秒执行一次语句:if
public static void main(String[] arguments) {
long startTime = System.currentTimeMillis();
long miniTime = startTime; //Declare miniTime equal to startTime
long endTime = startTime + 60000;
long index = 0;
while (true) {
double x = Math.sqrt(index);
long now = System.currentTimeMillis();
if (now > endTime){
break;
}
index++;
// my modification
//Current time minus last time the if executed and check if 5 seconds passed
if ((now - miniTime) >= 5000) {
miniTime = System.currentTimeMillis();
System.out.println("5 seconds have passed.");
//if you want to print the actual time elapsed every 5 seconds use this print
//System.out.println((now - startTime)/1000 + " seconds have passed.");
}
// end of my modification
}
System.out.println(index + " loops in one minute.");
}
请注意我现在如何比较当前时间now并减去miniTime以检查它是否大于或等于 5000 毫秒。要使用时间,您必须以某种方式将它与时间联系起来,在这种情况下System.currentTimeMillis()以及结果。数字本身(例如循环计数)永远不会是时间一致的。
一个循环可能执行数百万次,但只需要 3 秒。
示例输出:
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
5 seconds have passed.
16319642816 loops in one minute.
注意: 5 seconds have passed.打印 11 次,因为在 60 秒标记时循环被打破,所以最后一次打印没有打印。(11 * 5前 55 秒为 55)。
TA贡献1776条经验 获得超12个赞
您的代码运行良好;是你的期望有缺陷。
您的代码每 5,000 次迭代打印一个点。这基本上会产生价值。请记住,您的 CPU 每秒运行超过 20 亿次操作。您可能每秒可以执行几百万次这样的循环。称其为每秒一百万个循环,除以 5000 就是每秒 200 个点,或多或少。
TA贡献1828条经验 获得超3个赞
如果您仍然想在那种类型的输出中使用它,您可以使用StringBuilder. 它的编码是这样的:
StringBuilder stringBuilder = new StringBuilder();
并包含这样的循环:
if (miniIndex >= 5000) {
stringBuilder.append(miniIndex).append(".");
miniIndex = 0;
}
if (stringBuilder.length() >= 200) {
System.out.println(stringBuilder);
stringBuilder.setLength(0);
}
添加回答
举报