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

相关文章
|
1月前
|
数据采集 存储 算法
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
本文探讨视频RAG中的核心挑战——如何为无时间结构的视频转录文本设计有效分块策略。对比传统文本分块,提出基于停顿、重叠窗口、递归切分及LLM驱动的主题分块四层方案,实现细粒度检索与全局理解兼顾,提升视频内容检索准确性与上下文完整性。
205 13
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
|
1月前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
217 28
|
1月前
|
存储 人工智能 运维
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
阿里云以 STAROps 为起点,将 Agentic Ops 从概念推向生产级落地。
640 16
|
2月前
|
JSON JavaScript 前端开发
在TypeScript和JavaScript如何使用MetaMessage?
MetaMessage 是一种跨语言数据交换协议,支持 TypeScript/JavaScript(通过装饰器自动类型转换)、JSONC 文本与紧凑二进制 wire 格式,兼顾可读性、精度(如 bigint 表示 int64)与性能,旨在替代 JSON、Protobuf 等传统序列化方案。
251 125
|
2月前
|
JavaScript 文件存储 数据安全/隐私保护
打造你的私人电子书王国:Talebook 项目全面介绍
Talebook 以其简洁的部署、优雅的界面和强大的功能,成为了这个领域不可多得的好项目。
672 127
|
1月前
|
缓存 安全 Windows
C 盘垃圾清理全攻略:先删什么、哪些该迁移,安全扩容不翻车
本文手把手教你一套安全、高效、不踩坑的 C 盘清理流程,配图清晰,照着做就能释放大量空间!
|
1月前
|
消息中间件 监控 NoSQL
线上Kafka积压后,我是怎么处理的
本文记录一次Kafka消费组Lag飙升20万+的实战排障全过程:从快速定位积压分区、紧急扩容消费者、优化消费参数,到发现Redis大key根因、临时降级、事后加固监控与自动化响应。强调“可观测性+自动化”是应对消息积压的关键。
|
3月前
|
SQL 关系型数据库 MySQL
【全网最详细】Navicat下载免费版 | Navicat数据库管理工具安装图解(2026最新)
Navicat是一款专业、直观的数据库管理工具,支持MySQL、PostgreSQL、Oracle等十余种主流数据库。图形化界面替代命令行,轻松实现建表、SQL编写、数据导入导出与同步,大幅提升开发与DBA工作效率。(239字)
14682 132
|
1月前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
577 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
1月前
|
存储 Linux SDN
Proxmox Virtual Environment 9.2 发布,引入动态负载均衡器
Proxmox VE 9.2 发布 - 开源虚拟化管理平台
533 1
Proxmox Virtual Environment 9.2 发布,引入动态负载均衡器