从`if`到`for`循环:C#控制流语句终极指南

45 阅读4分钟

一、条件语句

条件语句是编程中最常见的逻辑判断工具。它允许你的程序根据某个条件是否为真,来决定执行哪一段代码。

1. if 语句

if语句是最基础的条件判断。它的逻辑很简单:“如果(if)这个条件是真的,就执行这里的代码。”

语法结构:

if (condition)
{
    // 当 condition 为 true 时,执行这里的代码
}

示例 假设一个游戏道具需要100个金币。我们可以用if来判断玩家是否有足够的金币。

int playerGold = 120;
int itemCost = 100;

if (playerGold >= itemCost)
{
    Console.WriteLine("金币足够,购买成功!");
    playerGold -= itemCost; // 扣除金币
    Console.WriteLine("剩余金币: " + playerGold);
}

在这个例子中,因为playerGold >= itemCost (120 >= 100) 的结果为true,所以{}中的代码会被执行。

2. if-else 语句

但如果玩家金币不够呢?if语句只管条件为真的情况。这时,我们需要else来处理条件为假的情况。

语法结构:

if (condition)
{
    // 当 condition 为 true 时执行
}
else
{
    // 当 condition 为 false 时执行
}

示例:

int playerGold = 70;
int itemCost = 100;

if (playerGold >= itemCost)
{
    Console.WriteLine("购买成功!");
}
else
{
    Console.WriteLine("金币不足,无法购买!");
}
// 输出: 金币不足,无法购买!

3. if-else if-else 语句

如果存在多种互斥的条件呢?比如根据玩家的等级给予不同的称号。这时就需要else if来构建一个多重选择的逻辑链。

示例:

int score = 85;

if (score >= 90)
{
    Console.WriteLine("等级:优秀");
}
else if (score >= 75)
{
    Console.WriteLine("等级:良好");
}
else if (score >= 60)
{
    Console.WriteLine("等级:及格");
}
else
{
    Console.WriteLine("等级:不及格");
}
// 输出: 等级:良好

程序会从上到下依次检查条件,一旦找到一个为true的,就会执行对应的代码块,然后跳过整个if-else if链条的其余部分。

4. switch 语句

当你的if-else if链条是基于同一个变量的多个固定值时,switch语句提供了一种更清晰、更优雅的写法。

语法结构:

switch (variable)
{
    case value1:
        // 当 variable 等于 value1 时执行
        break; // break 关键字是必须的,它会跳出 switch 结构
    case value2:
        // 当 variable 等于 value2 时执行
        break;
    default:
        // 如果以上 case 都不匹配,则执行这里的代码
        break;
}

示例:

int dayOfWeek = 3;
string dayName;

switch (dayOfWeek)
{
    case 1:
        dayName = "星期一";
        break;
    case 2:
        dayName = "星期二";
        break;
    case 3:
        dayName = "星期三";
        break;
    // ... 其他 case
    default:
        dayName = "无效的日期";
        break;
}

Console.WriteLine(dayName); // 输出: 星期三

二、循环语句

循环语句允许你一遍又一遍地执行同一段代码,直到满足某个退出条件。

1. for 循环

for循环是处理固定次数重复任务的最佳选择。它将初始化、循环条件和迭代器这三个部分都整合在了一行代码里,非常紧凑。

语法结构:

for (initializer; condition; iterator)
{
    // 循环体内的代码
}
  • initializer: 循环开始前执行一次(通常用于声明和初始化循环变量)。
  • condition: 每次循环开始前检查,如果为true,则执行循环体。
  • iterator: 每次循环结束后执行(通常用于递增或递减循环变量)。

示例:

for (int i = 1; i <= 5; i++)
{
    Console.WriteLine("发射第 " + i + " 发子弹!");
}

2. while 循环

while循环非常灵活,只要条件为true,它就会一直循环下去。

语法结构:

while (condition)
{
    // 只要 condition 为 true,就一直执行
}

警告: 使用while循环时,一定要确保循环体内有能够最终让condition变为false的逻辑,否则就会陷入无限循环

示例: 假设玩家中毒了,每秒恢复5点生命,直到生命值达到100。

int playerHealth = 70;
int maxHealth = 100;

while (playerHealth < maxHealth)
{
    playerHealth += 5;
    if (playerHealth > maxHealth)
    {
        playerHealth = maxHealth; // 防止超出最大生命值
    }
    Console.WriteLine("生命值恢复中... 当前生命: " + playerHealth);
}

Console.WriteLine("生命值已完全恢复!");

3. do-while 循环

do-while循环和while非常相似,唯一的区别是:do-while先执行一次循环体,再去判断条件。这就保证了循环体内的代码至少会被执行一次。

语法结构:

do
{
    // 这里的代码至少会执行一次
} while (condition);

示例: 无论如何,我们都希望至少向玩家显示一次菜单。

int choice;
do
{
    Console.WriteLine("===== 游戏菜单 =====");
    Console.WriteLine("1. 开始游戏");
    Console.WriteLine("2. 退出");
    Console.Write("请输入你的选择: ");
    choice = Convert.ToInt32(Console.ReadLine());
} while (choice != 1 && choice != 2);

Console.WriteLine("你已做出选择!");

三、跳转语句

有时我们需要更精细地控制循环的流程,比如提前退出循环,或者跳过某次循环。

  • break:立即终止并跳出整个循环(或switch语句)。
  • continue跳过当前这一次循环的剩余代码,直接开始下一次循环。
  • return:立即退出当前所在的整个方法(函数)。

示例:

string[] inventory = { "剑", "盾牌", "生命药水", "钥匙", "地图" };

for (int i = 0; i < inventory.Length; i++)
{
    if (inventory[i] == "生命药水")
    {
        Console.WriteLine("这是恢复道具,跳过。");
        continue; // 跳过本次循环,继续检查下一个物品
    }

    if (inventory[i] == "钥匙")
    {
        Console.WriteLine("找到钥匙了!停止搜索。");
        break; // 找到目标,跳出整个 for 循环
    }

    Console.WriteLine("检查物品: " + inventory[i]);
}

结语

点个赞,关注我获取更多实用 C# 技术干货!如果觉得有用,记得收藏本文!