簡體   English   中英

使 for 循環只運行一次的花括號?

[英]Curly braces making for loop run only once?

假設我有一個偽代碼並且 sum = 3

for i = (1 to 3)
    sum = sum + i
    return sum

這將返回 9 因為 3+1=4, 4+2=6, 6+3=9


但是當這樣做

for i = (1 to 3) {
    sum = sum + i
    return sum
}

返回的總和是 4? 為什么花括號以某種方式使 for 循環只運行一次?

如果您有以下 C 代碼:

for (int i=1; i<=3; ++i)
   sum = sum + i;
   return sum;

那么你有一種誤導性的寫作方式

for (int i=1; i<=3; ++i)
   sum = sum + i;

return sum;

這是因為上面的代碼段都等效於以下內容:

for (int i=1; i<=3; ++i) {
   sum = sum + i;
}

return sum;

for循環的主體是單個語句或塊。 大多數語言不認為縮進級別很重要。 (Python 是一個明顯的例外。)

相比之下,下面的代碼在循環的每一次循環中執行return ,而不是在循環完成后執行:

for (int i=1; i<=3; ++i) {
   sum = sum + i;
   return sum;
}

當然,它永遠不會到達循環的第二遍。

您對第一個循環的縮進具有誤導性。 展開兩者,很明顯發生了什么:

sum = sum + 1
sum = sum + 2
sum = sum + 3
return sum

這個把 6 加到sum然后返回它。

sum = sum + 1
return sum
sum = sum + 2
return sum
sum = sum + 3
return sum

這個將sum和加 1,然后返回它。 return語句結束函數的執行(即使它后面有更多語句,或者它在循環內)。

    sum = sum + i
    return sum

運行sum = sum + i 3 次。 然后執行return sum ,因為如果循環構造沒有大括號,它將只運行一個下一個操作。

這里

for i = (1 to 3) {
    sum = sum + i
    return sum
}

每個循環迭代都會嘗試執行return sum並且只有第一次迭代才會真正執行它。 下一次迭代將不會執行,因為return將打破循環。

在第二個示例中,您將 return 語句包含在 for 循環體中,因此在第一次迭代時返回。 在第一個示例中,僅在循環中執行加法/賦值語句,然后返回結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM