3月18日 continue跳转语句
一、单词
continue :v. 继续
- continue to read: 继续读
- continue to write 继续写
二、continue语句
用途:跳出本次循环,执行下一次循环。
它不是必须的,但用对了能让代码更清晰、更简洁、少嵌套。
三、工作原理
-
在 for 循环中:当
continue被执行,程序会跳过当前迭代剩余的代码,直接跳转到迭代语句(i++),然后进行条件判断。 -
在 while 循环中:当
continue被执行,程序会直接跳转到while的条件判断部分。 -
在 foreach 循环中,跳过当前元素的处理,直接获取集合中的下一个元素。
-
在 do while 循环中,程序会直接跳转到
while的条件判断部分。
四、continue VS break
| 语句 | 作用 | 场景 |
|---|---|---|
| continue | 跳过本次,继续下一次 | 过滤、跳过、不处理这项、简化 if 嵌套 |
| break | 直接结束整个循环 | 做完了、找到结果、退出 |
五、应用场景
1. 过滤不符合条件的数据(最常用)
当你只想处理符合条件的项,不符合的直接跳过。
比如:
- 只打印奇数,跳过偶数
- 只统计正数,跳过负数
- 只处理有效数据,跳过无效数据
这是 continue 90% 的使用场景。
2. 避免代码多层嵌套(让代码更干净)
不用 continue,你可能会写:
if(条件1)
{
if(条件2)
{
if(条件3)
{
// 真正要执行的代码
}
}
}
用 continue 可以改成扁平化写法:
if(!条件1) continue;
if(!条件2) continue;
if(!条件3) continue;
// 真正要执行的代码(无嵌套!)
代码更干净、更容易读。
3. 循环中遇到“不需要处理”的情况,直接跳过
比如:
- 数组里有空值,跳过
- 用户输入了错误内容,跳过本次输入
- 循环到某个特定数字,跳过不处理
- 读取文件时遇到空行,跳过
不需要处理 → 直接 continue → 不执行后面逻辑。
4. 嵌套循环中,跳过内层循环的某一步
continue 只影响自己所在的那一层循环,不会影响外层循环。
适合:
- 打印表格时跳过某一列
- 遍历二维数组时跳过某些位置
- 多层循环里只跳过内部某一次迭代
六、在嵌套循环中使用
continue 语句默认只作用于它直接所在的那一层循环。
如果你想在嵌套循环中跳出内层循环并继续外层循环的下一次迭代,需要使用 标签。
// 定义一个标签,作用于外层 for 循环
OuterLoop:
for (int i = 1; i <= 3; i++)
{
Console.WriteLine($"外层循环: {i}");
for (int j = 1; j <= 3; j++)
{
if (i == 2 && j == 2)
{
Console.WriteLine(" 遇到内层 i=2, j=2,继续下一次外层循环");
continue OuterLoop; // 直接跳到外层循环的下一次迭代
}
Console.WriteLine($" 内层循环: j = {j}");
}
}
// 输出:
// 外层循环: 1
// 内层循环: j = 1
// 内层循环: j = 2
// 内层循环: j = 3
// 外层循环: 2
// 遇到内层 i=2, j=2,继续下一次外层循环 (内层 j=3 被跳过)
// 外层循环: 3
// 内层循环: j = 1
// 内层循环: j = 2
// 内层循环: j = 3
案例1:跳过数字 5
要求:循环输出 1-10,跳过数字 5
// 方法 1:for 循环
for(int i = 1; i <= 10;i++)
{
if( i == 5 ) continue;
Console.Write(i + " ");
}
// 方法 2:while 循环
int i = 0;
while(i <= 10)
{
i++;
if(i == 5) continue;
Console.Write(i + " ");
}
// 方法 3
int i = 1;
while (i <= 10)
{
if (i != 5) // 只有当 i 不等于5时才输出
{
Console.Write(i + " ");
}
i++; // i++ 放在 if 外面,确保总是执行
}
// 输出: 1 2 3 4 6 7 8 9 10
案例2:跳过数字7和7的倍数
要求:输出 1~30 之间的数字,跳过数字 7 和 7 的倍数
for(int i = 1; i <= 30; i++)
{
if( i == 7 || i % 7 == 0) continue;
Console.Write(i + " ");
}
案例3:跳过奇数
要求:输出1~20之间的偶数,跳过奇数
for(int i = 1; i <= 20; i++)
{
if(i % 2 == 1) continue;
Console.Write( i + " ");
}
%运算符的含义
含义:% 运算符用于取两个数的余数。
语法: a % b
返回值:a 除以 b 的余数
示例
Console.Write(5 % 3);
Console.Write( 8 % 2);
Console.Write(2 % 8);
Console.Write(3 % 2);
结论:
- 奇数模以 2 永远是1;
- 偶数模以 2 永远是 0;
案例 4:跳过元音字母
字符串:
programming
要求:
- 跳过 a e i o u
- 只输出其他字母
输出:
prgrmmng
参考答案
string str = "programming";
foreach (char c in str)
{
if ("aeiou".Contains(c))
{
continue;
}
Console.Write(c);
}
案例 5:用户输入验证(实战场景)
需求:循环接收用户输入数字,输入负数则跳过,输入 0 结束循环,打印所有正数。 考察点:do-while 循环 + continue + 交互输入
参考答案
int num;
Console.WriteLine("输入数字(0退出,负数自动跳过):");
do
{
num = Convert.ToInt32(Console.ReadLine());
// 负数:跳过,不打印
if (num < 0)
{
Console.WriteLine("负数已跳过!");
continue;
}
// 0:结束循环
if (num == 0)
{
break;
}
// 正数:打印
Console.WriteLine("有效数字:" + num);
} while (true);
案例 6:跳过C字母开头的单词
跳过当前元素的处理,直接获取集合中的下一个元素。
string[] names = { "Alice", "Bob", "Charlie", "David" };
foreach (string name in names)
{
if (name.StartsWith("C")) // 如果名字以 C 开头,跳过
{
continue;
}
Console.WriteLine(name); // 输出: Alice, Bob, David
}