語法結構
for (initializer; condition; iterator)
statement;
// 三區塊皆可選
for (;;) { } // 無限迴圈
initializer:宣告/初始化迴圈變數 (可多個,逗號分隔)
condition:bool 運算式,true 繼續,false 結束
iterator:每次迴圈結束執行,通常更新迴圈變數
執行順序
- 執行
initializer (一次)
- 評估
condition:false → 結束;true → 執行 statement
- 執行
statement
- 執行
iterator
- 回到步驟 2
基礎範例
// 0 到 9
for (int i = 0; i < 10; i++) Console.WriteLine(i);
// 多變數
for (int i = 0, j = 10; i < j; i++, j--) Console.WriteLine($"{i},{j}");
// 字串遍歷
for (int i = 0; i < s.Length; i++) Console.Write(s[i]);
巢狀迴圈:楊輝三角
int rows = 5;
int[,] triangle = new int[rows, rows];
for (int i = 0; i < rows; i++)
{
triangle[i, 0] = 1;
triangle[i, i] = 1;
for (int j = 1; j < i; j++)
{
triangle[i, j] = triangle[i-1, j-1] + triangle[i-1, j];
}
}
for (int i = 0; i < rows; i++)
{
for (int j = 0; j <= i; j++)
Console.Write(triangle[i, j] + " ");
Console.WriteLine();
}
// 輸出:
// 1
// 1 1
// 1 2 1
// 1 3 3 1
// 1 4 6 4 1
階乘計算
long Factorial(int n)
{
long result = 1;
for (int i = 2; i <= n; i++)
result *= i;
return result;
}
// 反向迴圈
for (int i = n; i > 0; i--) result *= i;
break / continue 控制流
// 列印 0-9 除 7 外
for (int i = 0; i < 10; i++)
{
if (i == 7) continue; // 跳過 7
Console.WriteLine(i);
}
// 尋找第一個偶數
for (int i = 0; i < 100; i++)
{
if (i % 2 == 0) { Console.WriteLine(i); break; }
}
常見錯誤與最佳實踐
| 錯誤 | 正確做法 |
| 迴圈變數洩漏 | C# 迴圈變數作用域限定在 for 區塊,無洩漏問題 |
| off-by-one 邊界錯誤 | 偏好 i < length 而非 i <= length-1 |
| 修改迴圈變數導致邏輯錯誤 | 避免在 statement 中修改 iterator 變數 |
| 無限迴圈無跳出 | 確保有 break/return/throw 或 condition 會變 false |
現代替代:foreach / LINQ
// 簡單遍歷優先用 foreach
foreach (var item in collection) { }
// 需索引時
for (int i = 0; i < list.Count; i++) { var item = list[i]; }
// LINQ 替代複雜迴圈
var evens = Enumerable.Range(0, 100).Where(i => i % 2 == 0);
總結
for 迴圈是已知迭代次數、需索引控制、複雜更新邏輯的首選。掌握三區塊執行順序、巢狀結構、break/continue 流程控制,並知道何時改用 foreach/LINQ 獲得更清晰語意。
- 上一篇文章: C# foreach 迴圈深度解析:語法、集合介面契約、唯讀語意與效能
- 下一篇文章: C# do-while 迴圈:至少執行一次的後測試迴圈語法與應用
Copyright ©
程式碼之家 All Rights Reserved