当前位置: 首页 > news >正文

在 C# 中,while、for 和其他循环结构

前言:

        在 C# 中,while、for 和其他循环结构(例如 do-while)都是控制程序流的常用工具。它们在语法和应用场景上有所不同,理解它们的特点和适用场景对于写出高效的代码至关重要。我们来逐一分析它们的特点、时间复杂度,以及适合的使用场景。


1. for 循环
        语法:

for (int i = 0; i < 10; i++)
{
    // 执行的代码
}
特点:
  • 适用于已知循环次数的情况,通常用于计数和遍历。
  • 循环结构紧凑,初始化、条件判断和增量表达式都在一行中,便于理解和控制。
  • 常用于迭代数组、列表等集合。
时间复杂度:
  • 如果循环的次数是常数 n,那么 for 循环的时间复杂度是 O(n)。
应用场景:
  • 适用于数组、集合、固定次数的迭代等。

        示例:

// 计算数组元素的和
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = 0;
for (int i = 0; i &lt; numbers.Length; i++)
{
    sum += numbers[i];
}
Console.WriteLine("Sum: " + sum);

2. while 循环
        语法:

while (condition)
{
    // 执行的代码
}
特点:
  • 适用于在开始时无法确定循环次数的情况,循环会在每次迭代前检查条件是否成立。
  • 条件是循环继续的依据,常用于等待某个条件成立再退出循环。
时间复杂度:
  • 如果条件在每次迭代后能够改变并最终变为 false,则时间复杂度为 O(n),n 是循环次数。
应用场景:
  • 适用于条件未知或需要根据动态状态停止循环的情况。例如,从外部输入获取数据直到满足某个条件,或等待某个事件触发。

        示例:

// 读取用户输入直到输入正确
string input;
while (true)
{
    Console.WriteLine("请输入一个正整数:");
    input = Console.ReadLine();
    if (int.TryParse(input, out int number) &amp;&amp; number &gt; 0)
    {
        break;
    }
    Console.WriteLine("输入无效,请重新输入!");
}
Console.WriteLine("输入的数字是:" + input);

3. do-while 循环
        语法:

do
{
    // 执行的代码
} while (condition);
特点:
  • 与 while 循环类似,不同的是 do-while 循环在条件判断之前至少会执行一次。
  • 适用于需要至少执行一次循环体的情况,常用于输入验证、菜单驱动程序等场景。
时间复杂度:
  • 同样,如果循环的次数是常数 n,那么时间复杂度为 O(n)。
应用场景:
  • 适用于至少执行一次操作再检查条件的情况。例如,确保用户至少能输入一次数据。

        示例:

// 保证用户至少输入一次
int number;
do
{
    Console.WriteLine("请输入一个正整数:");
} while (!int.TryParse(Console.ReadLine(), out number) || number &lt;= 0);
Console.WriteLine("输入的数字是:" + number);

4. foreach 循环
        语法:

foreach (var item in collection)
{
    // 执行的代码
}
特点:
  • 适用于遍历集合(如数组、列表、字典等)时。
  • foreach 循环没有显式的计数器,它简化了集合元素的访问过程。
  • 不适用于修改集合的结构(如添加或删除元素),但可以用于读取集合元素。
时间复杂度:
  • 遍历集合的时间复杂度是 O(n),其中 n 是集合中的元素数量。
应用场景:
  • 遍历集合、数组等数据结构时,尤其是当你不关心索引时。

        示例:

// 遍历数组并打印每个元素
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (var number in numbers)
{
    Console.WriteLine(number);
}

5. break 和 continue 在循环中的使用

  • break:立即退出循环,跳出当前的循环结构。
  • continue:跳过当前迭代,直接进入下一次循环判断。

        示例:

// 使用 break 和 continue
for (int i = 0; i &lt; 10; i++)
{
    if (i == 5) break; // 当 i == 5 时退出循环
    if (i % 2 == 0) continue; // 跳过偶数
    Console.WriteLine(i); // 只打印奇数
}

总结对比:

循环类型特点适用场景时间复杂度
for知道循环次数时简洁高效数组遍历、固定次数的迭代O(n)
while在每次迭代前检查条件动态条件控制,直到满足某个条件O(n)
do-while保证至少执行一次循环体至少执行一次的场景,如用户输入验证O(n)
foreach遍历集合时简洁,无索引访问遍历数组、列表、字典等集合O(n)

总结:

  • for 循环 最适用于已知循环次数或范围的情况,结构清晰,便于控制。
  • while 循环 更适用于循环次数不确定的情况,依赖于条件的变化。
  • do-while 循环 确保至少执行一次,适合确保第一次操作执行的场景。
  • foreach 循环 简单高效,用于遍历集合,不需要关心索引。

相关文章:

  • 纯国产系统,首款鸿蒙电脑下月发布
  • 打破界限:Android XML与Jetpack Compose深度互操作指南
  • windows下git bash安装SDKMan报错Looking for unzip...Not found
  • android 之简述屏幕分辨率、屏幕密度、屏幕最小宽度
  • HarmonyOS学习 实验七:在页面上面添加警告弹窗、自定义弹窗、选择类弹窗、文本选择弹窗、日期选择等等
  • 三个STM32时钟配置函数的区别
  • 08_DCL
  • 安装操作系统后建议做的优化工作
  • AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
  • 【PCB工艺】软件是如何控制硬件的发展过程
  • 2025年华为杯广东工业大学程序设计竞赛(A最短路,生成树,G数学,最大公因数,I贪心)
  • 记录一次StarRocks集群迁移的经历
  • CentOS 7 全流程部署Magic-PDF数据清洗工具(附GPU加速方案)
  • 珠江桥牌斩获多项殊荣 匠心传承粤菜文化 创新引领调味新风尚
  • TDengine 数据写入优化:协议选择与批量操作(一)
  • SSL证书不可信的原因有哪些?(国科云)
  • Docker安装详细步骤、图文命令解析、包括Docker如何安装卸载MySQL 8容器、常用命令~
  • modus开源程序是一个由 WebAssembly 提供支持的构建代理流的框架
  • MIT6.828 Lab3-1 Speed up system calls (easy)
  • c#使用wpf实现helloworld和login登录