Skip to content

C# - For循环

for 循环是一种重复控制结构,允许你有效地执行代码块特定次数。当你知道需要迭代多少次时,例如处理数组中的每个项目时,它是理想的选择。

for 循环语法由三部分组成,用分号分隔:

for (initializer; condition; iterator)
{
// 每次迭代要执行的代码
}
  • initializer(初始化器):在循环开始前执行一次。你在这里声明并初始化循环控制变量(例如,var i = 0)。
  • condition(条件):在每次迭代前进行评估。如果为 true,则执行循环体。如果为 false,则循环终止。
  • iterator(迭代器):在每次迭代后执行。这通常用于增加或减少循环变量(例如,i++)。

for 循环的执行流程可以可视化如下:

[ 开始 ]
|
v
[ 1. 初始化器 (只运行一次) ]
|
v
[ 2. 条件检查 ] --(为 true)--> [ 3. 循环体执行 ]
^ | |
| |(为 false) |
| | v
| `---->[ 结束循环 ] [ 4. 迭代器执行 ]
| |
`----------------------------------------`

此示例打印从 1 到 5 的数字。请注意循环变量使用了 var 关键字,以及更常见的 i++ 递增运算符。

using System;
Console.WriteLine("Starting countdown...");
for (var i = 1; i <= 5; i++)
{
Console.WriteLine($"Value of i: {i}");
}
Console.WriteLine("...Blast off!");

执行后,此代码将产生:

Starting countdown...
Value of i: 1
Value of i: 2
Value of i: 3
Value of i: 4
Value of i: 5
...Blast off!

虽然 for 循环非常适合使用索引进行迭代,但当不需要索引时,foreach 循环通常是迭代数组和列表等集合的更简单、更安全的选择。

var fruits = new string[] { "Apple", "Banana", "Cherry" };
// 使用 'for' 循环(如果你需要索引)
Console.WriteLine("\n--- Using for loop ---");
for (var i = 0; i < fruits.Length; i++)
{
Console.WriteLine($"Index {i}: {fruits[i]}");
}
// 使用 'foreach' 循环(更简单,推荐用于简单迭代)
Console.WriteLine("\n--- Using foreach loop ---");
foreach (var fruit in fruits)
{
Console.WriteLine(fruit);
}

你可以使用控制语句改变循环的流程:

  • break:立即终止循环。
  • continue:跳过当前迭代的其余部分,并继续下一次迭代。
// 'break' 和 'continue' 的示例
for (int i = 1; i <= 10; i++)
{
if (i % 2 != 0)
{
// 跳过奇数
continue;
}
if (i > 8)
{
// 如果数字大于 8,则退出循环
break;
}
Console.WriteLine($"Processing even number: {i}");
}

这只会打印 Processing even number: 2、4、6 和 8。

1. 用于二维数据(例如,网格、表格)的嵌套循环

Section titled “1. 用于二维数据(例如,网格、表格)的嵌套循环”

嵌套的 for 循环非常适合处理二维结构,例如打印乘法表。

for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 5; j++)
{
// 使用填充来整齐地对齐数字
Console.Write($"{i * j, -4}"); // -4 表示左对齐,占用 4 个空格
}
Console.WriteLine(); // 每行结束后换到下一行
}

使用 for 循环原地修改数组或列表中的元素。

var numbers = new int[] { 10, 20, 30, 40, 50 };
// 将数组中的每个数字翻倍
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] *= 2;
}
Console.WriteLine($"Transformed array: {string.Join(", ", numbers)}");
// 输出: Transformed array: 20, 40, 60, 80, 100
  • 差一错误(Off-by-One Errors):小心你的条件。使用 <= 和 < 可能会导致错误。对于零索引数组 arr,条件应该是 i < arr.Length,而不是 i <= arr.Length。
  • 无限循环(Infinite Loops):确保你的迭代器和条件最终会导致循环终止。像 for(int i = 0; i >= 0; i++) 这样的条件将永远运行下去。