3 回答

TA貢獻1793條經(jīng)驗 獲得超6個贊
我認為您誤解了您的操作在做什么,因為它不是在計算毫秒,而是在計算彼此不miniIndex++相等的循環(huán)迭代次數(shù)。根據(jù)您想要發(fā)生的情況, 我已經(jīng)修改了您的代碼以每 5 秒執(zhí)行一次語句: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.");
}
請注意我現(xiàn)在如何比較當前時間now并減去miniTime以檢查它是否大于或等于 5000 毫秒。要使用時間,您必須以某種方式將它與時間聯(lián)系起來,在這種情況下System.currentTimeMillis()以及結果。數(shù)字本身(例如循環(huán)計數(shù))永遠不會是時間一致的。
一個循環(huán)可能執(zhí)行數(shù)百萬次,但只需要 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 秒標記時循環(huán)被打破,所以最后一次打印沒有打印。(11 * 5前 55 秒為 55)。

TA貢獻1776條經(jīng)驗 獲得超12個贊
您的代碼運行良好;是你的期望有缺陷。
您的代碼每 5,000 次迭代打印一個點。這基本上會產(chǎn)生價值。請記住,您的 CPU 每秒運行超過 20 億次操作。您可能每秒可以執(zhí)行幾百萬次這樣的循環(huán)。稱其為每秒一百萬個循環(huán),除以 5000 就是每秒 200 個點,或多或少。

TA貢獻1828條經(jīng)驗 獲得超3個贊
如果您仍然想在那種類型的輸出中使用它,您可以使用StringBuilder. 它的編碼是這樣的:
StringBuilder stringBuilder = new StringBuilder();
并包含這樣的循環(huán):
if (miniIndex >= 5000) {
stringBuilder.append(miniIndex).append(".");
miniIndex = 0;
}
if (stringBuilder.length() >= 200) {
System.out.println(stringBuilder);
stringBuilder.setLength(0);
}
添加回答
舉報