一、break语句的用法
掌握 break
语句的关键在于理解它的核心作用:跳出当前分支语句或循环语句,并将控制权交给被终止语句后面的代码。
用法1:跳出switch语句
在 switch
语句中,break
用于结束一个 case
分支,防止代码继续执行到下一个 case
(这种现象称为“穿透”)。这是必须的语法要求。
示例:
Console.WriteLine("请选择你的难度 (1-简单, 2-中等, 3-困难):");
string input = Console.ReadLine();
switch (input)
{
case "1":
Console.WriteLine("你选择了简单模式。");
break; // 执行完这里就跳出整个 switch
case "2":
Console.WriteLine("你选择了中等模式。");
break; // 执行完这里就跳出整个 switch
case "3":
Console.WriteLine("你选择了困难模式。");
break; // 执行完这里就跳出整个 switch
default:
Console.WriteLine("输入无效,请选择1-3。");
break; // 默认情况也需要 break
}
Console.WriteLine("游戏开始!"); // 这是 switch 后面的代码
输出: 如果你输入 2
,输出将是:
你选择了中等模式。
游戏开始!
如果没有 break
,代码会报错。break
在这里明确地告诉程序:“这个 case
已经结束了,请跳出 switch
”。
用法2:跳出while 循环
在循环(for
, while
, do...while
, foreach
)中,break
用于立即并完全终止整个循环,无论循环条件是否还满足。
场景: 当你已经找到了想要的结果,或者遇到了一个必须停止循环的错误条件时,使用 break
非常有用。
int count = 0;
while (count < 10) // 条件为 count 小于 10 时循环
{
Console.WriteLine(count);
count++;
if (count == 5) // 当 count 等于 5 时
{
Console.WriteLine("遇到5,提前终止循环!");
break; // 立即跳出 while 循环
}
}
Console.WriteLine("循环后的语句");
输出:
0
1
2
3
4
遇到5,提前终止循环!
循环后的语句
尽管循环的条件 count < 10
仍然为 true
,但 break
强制终止了它。
用法3:跳出for循环
// 在一个数组中查找第一个大于10的数字
int[] numbers = { 2, 5, 8, 12, 7, 15, 20 };
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] > 10)
{
Console.WriteLine($"找到了!第一个大于10的数字是 {numbers[i]},它在索引 {i} 的位置。");
break; // 找到后立即退出循环,不再继续查找后面的元素
}
Console.WriteLine($"检查 {numbers[i]}:不大于10。");
}
输出:
检查 2:不大于10。
检查 5:不大于10。
检查 8:不大于10。
找到了!第一个大于10的数字是 12,它在索引 3 的位置。
可以看到,找到数字 12
之后,循环就停止了,后面的 7
, 15
, 20
都不会再被检查。这提高了程序的效率。
用法4:跳出内部嵌套循环
break 只跳出一层循环:如果你的循环是嵌套的(循环里面还有循环),break
只会终止它所在的那一层循环,然后继续执行外层循环的后续代码。
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (j == 1)
{
break; // 这只跳出内层的 j 循环
}
Console.WriteLine($"i = {i}, j = {j}");
}
Console.WriteLine("跳出内层循环");
}
输出:
i = 0, j = 0
跳出内层循环
i = 1, j = 0
跳出内层循环
i = 2, j = 0
跳出内层循环
每次内层循环 j
到 1 时,break
就终止了内层循环,然后继续执行外层循环。
特点:跳出整个循环
break
:彻底结束整个循环。continue
:只结束本次循环,立刻跳回到循环条件判断,开始下一次循环。
// break 和 continue 的对比
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
break; // 当 i 为 2 时,整个循环结束
}
Console.WriteLine($"break 示例: i = {i}");
}
Console.WriteLine("--- 分割线 ---");
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
continue; // 当 i 为 2 时,跳过本次循环的后续代码,直接 i++
}
Console.WriteLine($"continue 示例: i = {i}");
}
输出:
break 示例: i = 0
break 示例: i = 1
--- 分割线 ---
continue 示例: i = 0
continue 示例: i = 1
continue 示例: i = 3
continue 示例: i = 4
注意 continue
只是跳过了 i = 2
的情况,循环继续执行了 i = 3
和 i = 4
。
二、continue语句的用法
continue
语句是C#中控制循环流程的重要工具,它允许你跳过当前循环迭代的剩余代码,直接开始下一次迭代。
1. continue语句的基本概念
作用:立即结束当前循环迭代,跳转到循环的条件检查部分,开始下一次迭代。
特点:只终止当前迭代,继续下一次循环
2. 基本语法
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0) // 如果是偶数
{
continue; // 跳过后续代码,直接开始下一次循环
}
Console.WriteLine(i); // 只打印奇数
}
3. 用法
用法1:在for循环中使用
// 打印1-10之间不是3的倍数的数字
for (int i = 1; i <= 10; i++)
{
if (i % 3 == 0)
{
continue; // 跳过3的倍数
}
Console.WriteLine(i);
}
// 输出: 1, 2, 4, 5, 7, 8, 10
用法2:在while循环中使用
// 处理用户输入,跳过空输入
int count = 0;
while (count < 5)
{
Console.WriteLine("请输入内容 (还剩" + (5 - count) + "次):");
string input = Console.ReadLine();
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("输入不能为空,跳过此次输入");
continue; // 跳过空输入,不计数
}
Console.WriteLine("你输入了: " + input);
count++;
}
用法3:在do-while循环中使用
// 计算正数之和,忽略负数
int sum = 0;
int number;
int attempts = 0;
do
{
attempts++;
Console.WriteLine("请输入一个数字 (输入0结束):");
number = Convert.ToInt32(Console.ReadLine());
if (number < 0)
{
Console.WriteLine("忽略负数");
continue; // 跳过负数处理
}
if (number > 0)
{
sum += number;
Console.WriteLine("当前总和: " + sum);
}
} while (number != 0);
Console.WriteLine("最终总和: " + sum);
Console.WriteLine("总尝试次数: " + attempts);
用法4:continue与嵌套循环
// continue只影响最内层的循环
for (int i = 1; i <= 3; i++)
{
Console.WriteLine("外部循环 i = " + i);
for (int j = 1; j <= 3; j++)
{
if (j == 2)
{
continue; // 只跳过内层循环的当前迭代
}
Console.WriteLine(" 内部循环 j = " + j);
}
}
/*
输出:
外部循环 i = 1
内部循环 j = 1
内部循环 j = 3
外部循环 i = 2
内部循环 j = 1
内部循环 j = 3
外部循环 i = 3
内部循环 j = 1
内部循环 j = 3
*/
4. 应用场景
场景1:处理数组时跳过特定元素
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sum = 0;
foreach (int num in numbers)
{
if (num % 2 == 0) // 如果是偶数
{
continue; // 跳过偶数,只处理奇数
}
sum += num;
}
Console.WriteLine("奇数的总和: " + sum); // 输出: 25 (1+3+5+7+9)
场景2:数据验证和清理
string[] data = { "apple", "", "banana", null, "cherry", " ", "date" };
List<string> cleanData = new List<string>();
foreach (string item in data)
{
if (string.IsNullOrWhiteSpace(item))
{
continue; // 跳过空值或空白字符串
}
cleanData.Add(item.Trim());
}
Console.WriteLine("清理后的数据: " + string.Join(", ", cleanData));
// 输出: apple, banana, cherry, date
场景3:复杂条件处理
// 处理学生成绩,跳过无效成绩并统计合格率
int[] scores = { 85, 92, -5, 78, 105, 60, 45, 88, 0, 75 };
int validScores = 0;
int passingScores = 0;
foreach (int score in scores)
{
// 跳过无效成绩(小于0或大于100)
if (score < 0 || score > 100)
{
Console.WriteLine($"跳过无效成绩: {score}");
continue;
}
validScores++;
// 跳过0分(缺考)
if (score == 0)
{
Console.WriteLine("跳过缺考成绩");
continue;
}
if (score >= 60)
{
passingScores++;
}
}
double passingRate = (double)passingScores / validScores * 100;
Console.WriteLine($"合格率: {passingRate:F2}%");
5. 常见错误和注意事项
错误1:在改变循环变量的语句前使用continue
// 可能导致无限循环的错误示例
int i = 0;
while (i < 10)
{
if (i == 5)
{
continue; // 跳过i++,导致无限循环
}
Console.WriteLine(i);
i++; // 这行在continue之后,可能不会执行
}
// 正确写法
int i = 0;
while (i < 10)
{
if (i == 5)
{
i++; // 先递增,再continue
continue;
}
Console.WriteLine(i);
i++;
}
错误2:过度使用continue
// 不易读的代码
foreach (var item in collection)
{
if (!condition1) continue;
if (!condition2) continue;
if (!condition3) continue;
// 实际处理代码
}
// 更清晰的写法
foreach (var item in collection)
{
if (condition1 && condition2 && condition3)
{
// 实际处理代码
}
}
总结
continue
用于跳过当前循环迭代的剩余代码,直接开始下一次迭代与
break
不同,continue
不会终止整个循环适用于跳过特定条件的处理,使代码更清晰
在嵌套循环中,
continue
只影响最内层的循环避免在改变循环变量的语句后使用
continue
,可能导致意外行为
实践建议:尝试重构你之前写的循环代码,使用continue
来简化复杂的条件判断。例如,处理一个数字列表时,跳过负数、零和过大的数字,只处理有效范围内的数字。
记住:continue
是提高代码可读性的工具,但不要过度使用。在简单的条件判断中,直接的if语句可能更清晰。