2 回答

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要快得多。

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