3 回答

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為您誤解了您的操作在做什么,因?yàn)樗皇窃谟?jì)算毫秒,而是在計(jì)算彼此不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)在如何比較當(dāng)前時(shí)間now并減去miniTime以檢查它是否大于或等于 5000 毫秒。要使用時(shí)間,您必須以某種方式將它與時(shí)間聯(lián)系起來,在這種情況下System.currentTimeMillis()以及結(jié)果。數(shù)字本身(例如循環(huán)計(jì)數(shù))永遠(yuǎn)不會是時(shí)間一致的。
一個(gè)循環(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 次,因?yàn)樵?60 秒標(biāo)記時(shí)循環(huán)被打破,所以最后一次打印沒有打印。(11 * 5前 55 秒為 55)。

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

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您仍然想在那種類型的輸出中使用它,您可以使用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);
}
添加回答
舉報(bào)