Administrator
发布于 2025-09-21 / 15 阅读
0
0

C#4.4:跳转语句用法详解

一、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 = 3i = 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语句可能更清晰。


评论