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);
}
添加回答
舉報