亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將變量設置回零

將變量設置回零

拉丁的傳說 2023-05-24 17:32:41
我正在使用亞馬遜上的一本電子書自學 Java。我正在上一門對計算機進行“基準測試”的課程。它通過循環一分鐘并計算結果來完成此操作。在完成之前,它基本上不會在一分鐘內向您顯示任何內容。所以我做了一個小修改,每隔幾秒顯示一個點作為某種進度條。通常這是一件微不足道的事情,但有些地方不對勁,我不知道是什么。發生的事情是 miniIndex 將達到我指定的閾值,并打印 miniIndex 的值和一個句點。然后應該將 miniIndex 設置為零,以便計數器可以重新啟動。但它不會重置,也不會再增加。這是非常奇怪的行為。這是完整的代碼:class Benchmark {    public static void main(String[] arguments) {        long startTime = System.currentTimeMillis();        long endTime = startTime + 60000;        long index = 0;        // My inner index        int miniIndex = 0;        //        while (true) {            double x = Math.sqrt(index);            long now = System.currentTimeMillis();            if (now > endTime){                break;            }            index++;            // my modification            miniIndex++;            if (miniIndex >= 5000) {                System.out.print(miniIndex + ".");                miniIndex = 0;            }            // end of my modification        }        System.out.println(index + " loops in one minute.");    }}
查看完整描述

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)。


查看完整回答
反對 回復 2023-05-24
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您的代碼運行良好;是你的期望有缺陷。

您的代碼每 5,000 次迭代打印一個點。這基本上會產生價值。請記住,您的 CPU 每秒運行超過 20 億次操作。您可能每秒可以執行幾百萬次這樣的循環。稱其為每秒一百萬個循環,除以 5000 就是每秒 200 個點,或多或少。


查看完整回答
反對 回復 2023-05-24
?
倚天杖

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);

}

http://img1.sycdn.imooc.com//646dd9fd0001464412610176.jpg

查看完整回答
反對 回復 2023-05-24
  • 3 回答
  • 0 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號