一文说清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

相关文章
|
4月前
|
JavaScript 文件存储 数据安全/隐私保护
打造你的私人电子书王国:Talebook 项目全面介绍
Talebook 以其简洁的部署、优雅的界面和强大的功能,成为了这个领域不可多得的好项目。
990 127
|
3月前
|
缓存 安全 Windows
C 盘垃圾清理全攻略:先删什么、哪些该迁移,安全扩容不翻车
本文手把手教你一套安全、高效、不踩坑的 C 盘清理流程,配图清晰,照着做就能释放大量空间!
|
3月前
|
消息中间件 监控 NoSQL
线上Kafka积压后,我是怎么处理的
本文记录一次Kafka消费组Lag飙升20万+的实战排障全过程:从快速定位积压分区、紧急扩容消费者、优化消费参数,到发现Redis大key根因、临时降级、事后加固监控与自动化响应。强调“可观测性+自动化”是应对消息积压的关键。
|
3月前
|
存储 人工智能 运维
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
阿里云以 STAROps 为起点,将 Agentic Ops 从概念推向生产级落地。
1132 25
|
3月前
|
数据采集 存储 算法
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
本文探讨视频RAG中的核心挑战——如何为无时间结构的视频转录文本设计有效分块策略。对比传统文本分块,提出基于停顿、重叠窗口、递归切分及LLM驱动的主题分块四层方案,实现细粒度检索与全局理解兼顾,提升视频内容检索准确性与上下文完整性。
284 13
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
|
3月前
|
存储 人工智能 弹性计算
阿里云正式推出首个 OPC 专属产品套餐,护航 OPC 从起步到规模化全阶段
2026年,AI驱动“一人公司”(OPC)兴起。阿里云首发OPC创新助力计划,推出Starter/Lite/Pro三档全栈云套餐,覆盖验证、增长到成熟全周期:低成本试错、高稳架构、全球加速与安全防护,并提供Token补贴、1V1技术护航及生态资源支持。(239字)
阿里云正式推出首个 OPC 专属产品套餐,护航 OPC 从起步到规模化全阶段
|
5月前
|
SQL 关系型数据库 MySQL
【全网最详细】Navicat下载免费版 | Navicat数据库管理工具安装图解(2026最新)
Navicat是一款专业、直观的数据库管理工具,支持MySQL、PostgreSQL、Oracle等十余种主流数据库。图形化界面替代命令行,轻松实现建表、SQL编写、数据导入导出与同步,大幅提升开发与DBA工作效率。(239字)
21739 132
|
3月前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
889 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
1月前
|
人工智能 开发者
阿里云百炼开通、免费7000万Tokens领取及免费额度查看全流程
阿里云百炼是一站式大模型开发平台,集成通义千问等主流模型,提供模型调用、应用构建与定制服务。新用户可自动获千万级免费Tokens(每模型100万),额度详情可在控制台“免费额度”页查看。阿里云百炼官网:https://t.aliyun.com/U/fPVHqY
|
9月前
|
存储 缓存 负载均衡
Nacos注册中心
本文介绍Nacos的安装部署、服务注册与发现、权重控制、集群隔离及临时/持久实例等核心功能,涵盖从环境搭建到高级配置的完整实践,助力微服务架构高效管理。
 Nacos注册中心