一文说清while循环、do-while循环、for循环

简介: 一文说清while循环、do-while循环、for循环

一文说清while循环、do-while循环、for循环

1.语法结构

while 循环:

while(条件){
    循环体
}
循环条件写在while后的括号中,循环体用{}包裹。

do-while循环

do{
    循环体 
}while(条件);
循环条件写在while后的括号里,循环体用{}包裹。

for循环

for(初始化;条件;更新){
    //循环体
}
将初始化、条件判断和循环变量更新集中在一行,结构更紧凑。

2.执行顺序

while循环:先判断条件,条件为真才执行循环体,可能一次都不执行。

do-while循环:先执行一次循环体,再判断条件,至少执行一次。

for循环:先执行初始化,再判断条件,条件为真执行循环体,循环体执行完后执行更新,再重复判断。

3.使用场景

while循环:适用于循环次数不确定,需根据条件动态决定是否继续循环的场景,如读取用户输入直到满足特定的条件。

do-while循环:适用于需要至少执行一次操作,再根据结果决定是否继续的场景,如菜单选择、输入验证等。

for循环:适用于循环次数已知或可预知的场景,如遍历数组、执行固定次数的操作。

总结 若需先判断条件再执行,用while;

若需要至少执行一次循环体再判断,用do-while;

若循环次数明确,用for更简洁清晰。

案例1、用户登录(用户名为admin,密码为password),三次失败锁定1分钟

用while 实现

 int j = 0;
 while (j < 3)
 {
     Console.WriteLine("请输入用户名:");
     string userName  = Console.ReadLine();
     Console.WriteLine("请输入密码:");
     string password = Console.ReadLine();
     if (userName != "admin" && password == "123456")
     {
         Console.WriteLine("用户名输入错误");
     }
     else if (password != "123456" && userName == "admin")
     {
         Console.WriteLine("密码输入错误");
     }
     else if (userName == "admin" && password == "123456")
     {
         Console.WriteLine("用户登录成功!");
         break;
     }
     j++;
     if (j == 3)
     {
         Console.WriteLine("锁定1分钟");
         break;
     }
 }

image.png

用do while实现

int j = 0;
do
{
    Console.WriteLine("请输入用户名:");
    string userName = Console.ReadLine();
    Console.WriteLine("请输入密码:");
    string password = Console.ReadLine();
    if (userName != "admin" && password == "123456")
    {
        Console.WriteLine("用户名输入错误");
    }
    else if (password != "123456" && userName == "admin")
    {
        Console.WriteLine("密码输入错误");
    }
    else if (userName == "admin" && password == "123456")
    {
        Console.WriteLine("用户登录成功!");
        break;
    }
    j++;
    if (j == 3)
    {
        Console.WriteLine("锁定1分钟");
        break;
    }

} while (j < 3);

image.png

用for循环实现

for (int i = 1; i <= 3; i++)
{
    Console.WriteLine("请输入用户名:");
    string userName = Console.ReadLine();
    Console.WriteLine("请输入密码:");
    string password = Console.ReadLine();
    if (userName != "admin" && password == "123456")
    {
        Console.WriteLine("用户名输入错误");
    }
    else if (password != "123456" && userName == "admin")
    {
        Console.WriteLine("密码输入错误");
    }
    else if (userName == "admin" && password == "123456")
    {
        Console.WriteLine("用户登录成功!");
        break;
    }
    if (i == 3)
    {
        Console.WriteLine("锁定1分钟");
        break;
    }
}

image.png

案例2、用while循环实现10个0到9的随机数(不重复)

用while循环实现(代码最少)

Random random = new Random();
List<int> list = new List<int>();
while (list.Count < 10)
{ 
    int temp = random.Next(0,10);
    if (!list.Contains(temp))
    { 
        list.Add(temp);
    }
}
for (int i = 0; i < list.Count; i++)
{
    Console.Write(list[i]+"\t");
}

image.png
用do-while循环实现

Random random = new Random();
List<int> list = new List<int>();
do {
    int temp = random.Next(0, 10);
    if (!list.Contains(temp))
    {
        list.Add(temp);
    }
}while (list.Count<10);

for (int i = 0; i < list.Count; i++)
{
    Console.Write(list[i] + "\t");
}

image.png

用for循环实现

Random random = new Random();
List<int> list = new List<int>();
for (int i = 0; i < 10; i++)
{
    int temp = random.Next(0, 10);
    if (!list.Contains(temp))
    {
        list.Add(temp);
    }
    else
    {
        i--;
    }
}
for (int i = 0; i < list.Count; i++)
{
    Console.Write(list[i] + "\t");
}

image.png

案例3 乘法口诀表

用while实现

int i = 1;
while (i<10)
{
    int j = 1;
    while (j<=i)
    {
        Console.Write($"{j}×{i}={j * i}\t");
        j++;
    }
    i++;
    Console.WriteLine();
}

image.png

用do while实现

int i = 1;
do
{
    int j = 1;
    do
    {
        Console.Write($"{j}×{i}={j * i}\t");
        j++;
    } while (j <= i);
    Console.WriteLine();
    i++;
} while (i < 10);

image.png

用for循环实现

for (int i = 1; i < 10; i++)
{
    for (int j = 1; j <= i; j++)
    {
        Console.Write($"{j}×{i}={j*i}\t"); 
    }
    Console.WriteLine();
}

image.png

相关文章
|
6月前
|
JavaScript 文件存储 数据安全/隐私保护
打造你的私人电子书王国:Talebook 项目全面介绍
Talebook 以其简洁的部署、优雅的界面和强大的功能,成为了这个领域不可多得的好项目。
1150 127
|
5月前
|
存储 人工智能 运维
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
阿里云以 STAROps 为起点,将 Agentic Ops 从概念推向生产级落地。
1447 33
|
7月前
|
SQL 关系型数据库 MySQL
【全网最详细】Navicat下载免费版 | Navicat数据库管理工具安装图解(2026最新)
Navicat是一款专业、直观的数据库管理工具,支持MySQL、PostgreSQL、Oracle等十余种主流数据库。图形化界面替代命令行,轻松实现建表、SQL编写、数据导入导出与同步,大幅提升开发与DBA工作效率。(239字)
27153 132
|
5月前
|
消息中间件 监控 NoSQL
线上Kafka积压后,我是怎么处理的
本文记录一次Kafka消费组Lag飙升20万+的实战排障全过程:从快速定位积压分区、紧急扩容消费者、优化消费参数,到发现Redis大key根因、临时降级、事后加固监控与自动化响应。强调“可观测性+自动化”是应对消息积压的关键。
|
5月前
|
存储 人工智能 弹性计算
阿里云正式推出首个 OPC 专属产品套餐,护航 OPC 从起步到规模化全阶段
2026年,AI驱动“一人公司”(OPC)兴起。阿里云首发OPC创新助力计划,推出Starter/Lite/Pro三档全栈云套餐,覆盖验证、增长到成熟全周期:低成本试错、高稳架构、全球加速与安全防护,并提供Token补贴、1V1技术护航及生态资源支持。(239字)
阿里云正式推出首个 OPC 专属产品套餐,护航 OPC 从起步到规模化全阶段
|
5月前
|
缓存 安全 Windows
C 盘垃圾清理全攻略:先删什么、哪些该迁移,安全扩容不翻车
本文手把手教你一套安全、高效、不踩坑的 C 盘清理流程,配图清晰,照着做就能释放大量空间!
|
5月前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
1104 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
8月前
|
存储 C语言 内存技术
C语言深度解析:大小端字节序——多字节数据的底层存储规则
大小端指CPU对多字节数据在内存中的存放顺序:大端高字节存低地址,小端反之。x86/ARM默认小端,网络字节序统一为大端。跨平台、网络通信、二进制协议开发中必须显式处理字节序转换,否则数据解析必错。
1362 138
|
5月前
|
人工智能 自然语言处理 数据处理
《AI智能体时代,OPC中国为什么开始被关注》
AI智能体正重塑行业协作模式,“OPC中国”聚焦“One Person Company”理念,探索AI时代下轻量化组织、个人能力放大与新型职业教育。它倡导以AI Agent、工作流自动化和多智能体协同为核心,培养个体驾驭复杂任务的新能力。(239字)
|
5月前
|
存储 弹性计算 负载均衡
阿里云巨型帧Jumbo Frames配置手册:ECS云服务器实例规格族支持、开启关闭、MTU设置教程
阿里云巨型帧(Jumbo Frames)支持8500字节MTU,可提升吞吐量、降低CPU负载,适用于HPC、大数据、SAN等场景。g8i/c8i/r8i及9代等主流实例规格默认支持,需全链路设备协同配置,避免分片风险。详细参考阿里云服务器ECS官网链接:https://t.aliyun.com/U/AZBUsA
432 1