C#双层for循环
一、双层for循环核心概念
定义:由外循环(外层控制整体次数)和内循环(内层控制单次外层循环的执行次数)组成,内层循环嵌套在外层循环的循环体中。
核心特点:外循环执行1次,内循环执行完整一轮(直到内循环条件不成立),再执行外循环的迭代表达式,进入下一次外循环,以此类推。
命名规范:外循环计数器常用 i,内循环计数器常用 j(避免变量名重复,引发语法错误),若有三层及以上循环,可依次用 k、l 等。
二、双层for循环核心语法
// 外循环:控制整体循环次数
for (int i = 0; i < 外循环条件; i++)
{
// 外循环体(可包含普通代码、内循环)
for (int j = 0; j < 内循环条件; j++)
{
// 内循环体:外循环每执行1次,内循环执行完整一轮
}
}
三、双层for循环执行顺序(重点必记)
执行顺序与单层for循环一致,核心是“外循环1次,内循环一轮”,具体流程如下(结合示例详解):
示例1:基础双层for循环(理解执行顺序)
for (int i = 0; i < 3; i++) // 外循环(控制3次)
{
Console.WriteLine("i的值为" + i);// 外循环体代码
for (int j = 0; j < 3; j++) // 内循环(每次外循环,内循环执行3次)
{
Console.WriteLine("j的值为" + j);
}
}
详细执行流程
-
外循环:初始化
i=0→ 判断i<3(成立) → 执行外循环体(打印“i的值为0”); -
内循环:初始化
j=0→ 判断j<3(成立) → 打印“j的值为0” →j++(j=1); -
内循环:判断
j<3(成立) → 打印“j的值为1” →j++(j=2); -
内循环:判断
j<3(成立) → 打印“j的值为2” →j++(j=3); -
内循环:判断
j<3(不成立) → 内循环终止,执行外循环迭代表达式i++(i=1); -
重复步骤1-5,直到外循环
i=3(条件不成立),整个双层循环终止。
输出规律:i=0时j=0、1、2;i=1时j=0、1、2;i=2时j=0、1、2(外循环3次,内循环每次3次,共执行3×3=9次内循环体)。
四、break和continue在双层for循环中的用法(重点)
核心规则:break/continue仅作用于当前所在的循环(内循环的break/continue不影响外循环,外循环的break/continue不影响内循环)。
示例1:内循环中使用break(终止当前内循环,进入下一次外循环)
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.WriteLine($"i的值为{i},j的值为{j}");
if (j == 2)
{
break; // 仅终止当前内循环,外循环继续执行
}
}
}
输出结果:i=0时j=0、1、2;i=1时j=0、1、2;i=2时j=0、1、2(break在j=2时触发,内循环终止,但外循环正常执行)。
示例2:内循环中break在判断后(跳过j=2的打印)
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (j == 2)
{
break; // j=2时,终止内循环,不执行后续打印
}
Console.WriteLine($"i的值为{i},j的值为{j}");
}
}
输出结果:i=0时j=0、1;i=1时j=0、1;i=2时j=0、1(j=2时触发break,跳过打印,内循环终止)。
示例3:内循环中使用continue(跳过当前内循环,继续下一次内循环)
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (j == 1)
{
continue; // 跳过j=1的本次内循环,不执行后续打印,继续j=2的循环
}
Console.WriteLine($"i的值为{i},j的值为{j}---------");
}
}
示例4:内循环中嵌套break和continue(多条件控制)
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1)
{
break; // i=1时,终止当前内循环,进入i=2的外循环
}
if (j == 1)
{
continue; // j=1时,跳过本次内循环打印
}
Console.WriteLine($"i的值为{i},j的值为{j}+++++++++++");
}
}
示例5:外循环中使用break(终止整个双层循环)
for (int i = 0; i < 3; i++)
{
if (i == 1)
{
break; // 外循环i=1时,终止整个双层循环,内循环也不再执行
}
for (int j = 0; j < 3; j++)
{
if (j == 1)
{
continue;
}
Console.WriteLine($"i的值为{i},j的值为{j}???????");
}
}
输出结果:仅i=0时j=0、2(外循环i=1触发break,整个双层循环终止,i=2不再执行)。
五、双层for循环实战应用(重点场景)
双层for循环核心应用:打印图形、九九乘法表、二维数组遍历等,核心是通过外循环控制“行”,内循环控制“列”。
应用1:打印九九乘法表
需求:打印标准九九乘法表,共9行,第i行有i个表达式(1×i、2×i、...、i×i)。
// 外循环:控制行数(1~9行,共9次)
for (int i = 1; i <= 9; i++)
{
// 内循环:控制每行的表达式个数(第i行有i个表达式,j从1到i)
for (int j = 1; j <= i; j++)
{
// Console.Write:不换行,让同一行的表达式连在一起
Console.Write($"{j}*{i}={j * i} ");
}
Console.WriteLine("");// 每一行结束后换行,进入下一行
}
关键逻辑:外循环i控制行数(1~9),内循环j控制每行的表达式个数(j≤i),Console.Write 保证同一行不换行,Console.WriteLine 实现换行。
应用2:打印等腰直角三角形(☆组成)
需求:打印3行等腰直角三角形,第i行有i+1个☆(i从0开始)。
// 外循环:控制行数(3行,i从0到2)
for (int i = 0; i < 3; i++)
{
// 内循环:控制每行的☆个数(第i行有i+1个,j从0到i)
for (int j = 0; j <= i; j++)
{
Console.Write("☆ "); // 不换行,打印☆和空格
}
Console.WriteLine("");// 每行结束换行
}
输出效果: ☆
☆ ☆
☆ ☆ ☆
应用3:打印等腰三角形(☆组成)
需求:打印4行等腰三角形,每行☆个数为奇数(1、3、5、7),每行前有对应空格,实现居中效果。
// 外循环:控制行数(4行,i从0到3)
for (int i = 0; i < 4; i++)
{
// 第一个内循环:打印每行前的空格(实现居中,空格数随i递增而减少)
for (int z = 0; z < 2 * (3 - i); z++)
{
Console.Write(" ");
}
// 第二个内循环:打印每行的☆(个数为2*i+1,奇数递增)
for (int j = 0; j < 2 * i + 1; j++)
{
Console.Write("☆");
}
Console.WriteLine("");// 每行结束换行
Console.WriteLine(""); // 增加换行,让图形更舒展
}
关键逻辑:
1. 空格循环:空格数 = 2×(3 - i),i=0时6个空格,i=1时4个空格,依次递减2个,实现居中;
2. ☆循环:☆个数 = 2×i + 1,i=0时1个,i=1时3个,依次递增2个,形成等腰效果。
六、易错点提醒(高频踩坑)
-
外循环和内循环计数器变量名重复(如都用i),导致语法错误;
-
混淆break/continue的作用范围,误以为内循环的break能终止外循环;
-
打印图形时,误用
Console.WriteLine(换行)和Console.Write(不换行),导致图形错乱; -
内循环条件设置错误(如打印九九乘法表时,j的条件写成j<9),导致每行表达式个数错误;
-
外循环或内循环忘记写迭代表达式(如i++、j++),导致死循环。
七、核心总结
-
双层for循环:外循环控制“行”(整体次数),内循环控制“列”(单次外循环的次数),外循环1次,内循环一轮;
-
执行顺序:外循环初始化 → 外循环条件判断 → 外循环体(内循环完整执行) → 外循环迭代 → 重复;
-
break/continue:仅作用于当前所在循环(内循环不影响外循环,外循环终止则整个双层循环终止);
-
核心应用:打印图形(直角三角形、等腰三角形)、九九乘法表,本质是“行+列”的双重控制;
-
避坑关键:区分变量名、正确使用换行方法、精准设置内循环条件、避免死循环。
更多推荐
所有评论(0)