C# 跳转语句全面演练第 1 部分 - break、continue

发布日期:2026-07-14 19:13:03   来源 : 杭州电子商务研究院    浏览量 :2
杭州电子商务研究院 发布日期:2026-07-14 19:13:03  
2

介绍

当你开始学习一门编程语言,比如 C# 时,最重要的概念之一就是流程控制。我们知道一个程序是由语句组成的。这些语句的组合方式使得程序更加强大。这就是流程控制的职责:控制程序执行的流程

在许多情况下,逐个顺序执行是不够的,因此流程控制提供了很多有用的语句,如条件语句迭代语句跳转语句和其他高级功能。在本指南中,我们将重点介绍 C# 中的一个重要流程控制:跳转语句

跳转语句在复杂逻辑中起着重要作用。它甚至可以讲述著名的寓言《乌鸦和水罐》

一只口渴的乌鸦想喝水罐里的水,但它够不到水。所以它不得不捡起鹅卵石,一次又一次地把它们扔进水罐里,直到水够到为止。

作为初学者的教程,我尽力使用生动的可视化示例来帮助您理解。

  1. 首先,我将从一个有趣的场景开始。
  2. 接下来我会把各类跳转语句的代码模板流程图展示给大家。
  3. 此外,我们对其进行了比较,并总结了最佳实践
  4. 最后我们来谈谈高级用法。

本指南(第 1 部分)将重点介绍基本概念并介绍两个重要的跳转语句:breakcontinue语句。

入门

有些读者可能会好奇。什么是跳转语句?为什么我们需要它?

让我们回到“乌鸦和水罐”这个寓言故事。

定义一堆鹅卵石int数组,假设投手的剩余空间为pitcherVacancy 。乌鸦需要不断捡起鹅卵石来填满pitcherVacancy 。所以循环在这里是合适的。但是一旦投手满了,我们就应该跳出循环。Jump语句就是为这种情况而生的。

我们先看一下实现:

      Console.WriteLine("pick up pebbles to fill the vacancy in pitcher");
int pitcherVacancy = 28;
int[] pebbles = {8, 6, 7, 9, 8, 5, 10};
foreach (int pebble in pebbles)  // use foreach to pick up all the pebbles 
{
    pitcherVacancy -= pebble;
    Console.WriteLine("pick up a pebble size of {0}, get {1} vacancy left", pebble, pitcherVacancy);
    if (pitcherVacancy <= 0)	// break out once pitcher is full
    {
        break;
    }
    Console.WriteLine("still can not reach the water, I have to pick up more pebbles");
}
Console.WriteLine("finally, I can drink the water!");
    

让我们运行寓言程序:

      pick up pebbles to fill the vacancy in the pitcher
pick up a pebble size of 8, get 20 vacancies left
still can not reach the water, I have to pick up more pebbles
pick up a pebble size of 6, get 14 vacancies left
still can not reach the water, I have to pick up more pebbles
pick up a pebble size of 7, get 7 vacancies left
still can not reach the water, I have to pick up more pebbles
pick up a pebble size of 9, get -2 vacancies left
finally, I can drink the water!
    

从上面的例子,我们可以看到是否我们要改变循环中的流程,比如在某些条件下中断循环,或者跳过其余循环逻辑并继续进行下一次迭代,甚至转到任何你想要的地方。

这就是跳转语句在控制流中的作用。我们将在后面的章节中学习这三个基本的跳转语句。

break 语句

句法

由于我们在上一节中已经学习了break语句的示例,现在是时候学习 C# 中break的语法了。以下是代码模板:

      loop (loop_condition)	// represents all kinds of loop
{
    code_block_before_break;
    if (break_condition)
    {
         break;
    }
    code_block_after_break;
}
    

分析break语句中的各个部分

  • loop代表所有类型的迭代语句,包括do-while,尽管语法略有不同。
  • break_condition是一个布尔表达式,决定中断循环的条件。
  • code_block_before_break是break之前的逻辑
  • code_block_after_break是break之后的逻辑,当break触发时,会跳过该逻辑

流程图

我画了一个break语句的流程图来帮助你更好的理解流程控制。

红线代表循环流程,线代表跳转流程。或者你也可以只关注代码模板中的箭头方向。

从流程图中我们可以看到break是在标准循环上构建的,关键是当break_condition被触发时,跳过剩余的循环。

continue 语句

设想

想象一下这样的场景:

设计一个彩票生成器,生成1到9六个数字,且不允许有重复的数字。

continue语句可以解决这个问题。

句法

按照惯例,我们首先学习continue语句的语法。

      loop (loop_condition)
{
    code_block_before_continue;
    if (continue_condition)
    {
         continue;
    }
    code_block_after_continue;
}
    

continue中的代码段与break类似,如有需要可参考上一节。

流程图

请看一下继续流程图。它直观地显示了流程控制。

红线代表循环流程,线代表继续跳转流程。或者你也可以只关注代码模板中的箭头方向。

break类似,我们可以看到continue也是建立在标准循环之上。唯一的区别是,当continue_condition触发时,会跳过当前迭代中的其余循环逻辑。

实践

既然我们已经了解了continue的机制,现在是时候解决彩票问题了。这个想法是在循环中生成数字,直到我们得到足够的数字。如果某个数字是重复的,我们就放弃它并继续循环。

      Random random = new Random();
List<int> lottery = new List<int>();
while (lottery.Count < 6)
{
    int num = random.Next(1, 10);
    if (lottery.Contains(num))
    {
        Console.WriteLine("{0} already exists, generate again", num);
        continue;	//if num is duplicate, abandon and generate again
    }
    lottery.Add(num);
    Console.WriteLine("generate number: {0}", num);
}

Console.WriteLine("the result of lottery is: {0}", string.Join(", ", lottery));
    

生成结果如下:

      generate number: 1
generate number: 9
9 already exists, generate again
generate number: 2
generate number: 8
generate number: 4
2 already exists, generate again
generate number: 7
the result of the lottery is: 1, 9, 2, 8, 4, 7
    

请注意,这个解决方案不是最有效的算法,但却是continue的一个很好的例子。

用于嵌套循环

<font sty

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据