第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么一個嵌套的while循環(huán)比另一個嵌套的while循環(huán)快?

為什么一個嵌套的while循環(huán)比另一個嵌套的while循環(huán)快?

拉風(fēng)的咖菲貓 2022-06-04 16:56:31
所以我在課堂上寫了一個嵌套的while循環(huán)來計算z的值。我需要輸出 z 和獲取它所需的時間。這是結(jié)果public class TimeWhile {public static void main(String[] args) {    int n = 100000;    int z = 1;    long startTime = System.currentTimeMillis();    int x = 0;    while (x <= n) {        int y = 0;        while (y <= n) {            z = x * y;            y++;        }        x++;    }    long endTime = System.currentTimeMillis();    long elapsed = endTime - startTime;    System.out.println("The time is " + elapsed);    System.out.println("The number is " + z);}}第二個while循環(huán)public class TimeWhile {public static void main(String[] args) {    int n = 100000;    int z = 1;    long startTime = System.currentTimeMillis();    int x = 0;    int y = 0;    while (x <= n) {        while (y <= n) {            z = x * y;            x++;            y++;            }    }    long endTime = System.currentTimeMillis();    long elapsed = endTime - startTime;    System.out.println("The time is " + elapsed);    System.out.println("The number is " + z);}}為什么第二個跑得更快?輸出“z”是相同的。
查看完整描述

2 回答

?
夢里花落0921

TA貢獻(xiàn)1772條經(jīng)驗 獲得超6個贊

我相信這段代碼有很多問題。


首先,不需要z = x * y在循環(huán)內(nèi)部計算,因為每次但最后一次迭代都會覆蓋該值。因此,您的代碼實際上與以下內(nèi)容相同:


heatTheUniverseForSomeTime();

int z = n*n;

這意味著輸出z相同的事實實際上幾乎沒有說明循環(huán)是如何工作的。


其次int是沒有足夠大的類型來保存 的值100000*100000。這就是為什么你有1410065408而不是更多的期望10000000000。long會有所幫助(但請注意,您也應(yīng)該將至少一個論點(diǎn)long放在右邊!)。如果您需要更大的值,請考慮BigInteger.


for第三點(diǎn)是,您的第一個示例可以通過使用循環(huán)以更常見且因此易于理解的形式重寫,如下所示:


for(int x = 0; x <= n; x++) {

    for(int y = 0; y <= n; y++) {

        z = x * y;

    }

}

這段代碼顯然需要n*n總共運(yùn)行迭代。


我也相信現(xiàn)在第 1 點(diǎn)變得更加清晰。


最后,您的第二個代碼在兩個不同方面不等同于此:


正如所指出的,你永遠(yuǎn)不會重置,y所以在第一次內(nèi)部運(yùn)行循環(huán)運(yùn)行后它永遠(yuǎn)不會再次運(yùn)行


此外,由于您x++;在內(nèi)循環(huán)中也是如此,這意味著它始終保持x == y,因此外循環(huán)也永遠(yuǎn)不會在第一次迭代后運(yùn)行。


您的第二個代碼實際上與


for(int x = 0, y = 0; y <= n && x <= n; x++, y++) {

    z = x * y;

}

這段代碼顯然只需要運(yùn)行n幾次,而不是n*n要快得多。


查看完整回答
反對 回復(fù) 2022-06-04
?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊

在第一個循環(huán)中,y總是將值分配給zeroevery iteration,這使得它需要更多的時間和步驟才能達(dá)到n,而在第二個循環(huán)中,y不會重置為,zero因此它可以更快地達(dá)到 n 并且步驟更少。


循環(huán)1


while (x <= n) {

        int y = 0;

循環(huán)2


 while (x <= n) {

        while (y <= n) {

            z = x * y;

            x++;

            y++;    

        }


查看完整回答
反對 回復(fù) 2022-06-04
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號