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

用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);

用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;
}
}

案例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");
}

用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");
}

用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");
}

案例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();
}

用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);

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