CodeGym /课程 /C# SELF /嵌套if,多层逻辑

嵌套if,多层逻辑

C# SELF
第 3 级 , 课程 2
可用

1. 嵌套if的基础语法

现实生活中很少有只靠一个条件就能做决定的情况。通常我们要同时检查好几个条件,而且它们经常互相关联。比如说,想进演唱会,不光要成年,有时候还得在邀请名单里。这时候就需要用到所谓的多层逻辑,而帮我们实现的就是嵌套if语句。

嵌套条件就是一个if里面再套一个if。想象一下盒子里套盒子:如果第一个盒子打开了(条件成立),我们再看看里面是不是还有别的盒子,也许还要再打开第二个。从代码和逻辑上来说,这招很强大。

先来个简单的例子:

if (条件A)
{
    // 如果条件A为true(成立)要做的事
    if (条件B)
    {
        // 如果两个条件都成立要做的事
    }
}
一个 if嵌套在另一个 if

如果你觉得这像俄罗斯套娃——你理解得没错!内层的if只有在外层成立时才会执行。

例子:进夜店

我们来升级一下之前的练习程序,之前用户输入了名字和年龄。现在加一个第二层的检查:比如说,想进封闭夜店,得年满21岁而且还要有邀请码。

Console.Write("请输入你的名字: ");
string name = Console.ReadLine();

Console.Write("请输入你的年龄: ");
int age = int.Parse(Console.ReadLine());

if (age >= 21)
{
    Console.Write("请输入邀请码: ");
    string code = Console.ReadLine();

    if (code == "VIP2024")
    {
        Console.WriteLine("欢迎, " + name + ", 来到VIP俱乐部!");
    }
    else
    {
        Console.WriteLine("不好意思,邀请码不对。禁止进入。");
    }
}
else
{
    Console.WriteLine("不好意思,21岁以上才能进!");
}

注意:内层if只有在年龄通过检查后才会检查邀请码。这样省资源(也不让保安抓狂)。

2. 嵌套可以有几层?

技术上来说,想嵌多少层都行。但实际上——嵌套层数越多,代码越难读也越难维护。一般很少超过2-3层。如果你发现自己写了4层以上的“楼梯”式if,就要想想是不是可以简化逻辑,或者把一部分检查单独写成函数(这个以后会讲!)。

3. 嵌套if和else:常见坑和细节

新手常犯的错:大括号写得不规范。

写嵌套条件的时候,尤其是用else时,C#对语法要求很严格。如果你不加大括号{},那ifelse只会管它后面第一行。这是很多小bug的来源。

有坑的例子:

if (age >= 21)
    if (code == "VIP2024")
        Console.WriteLine("欢迎!");
else
    Console.WriteLine("邀请码错了。");

很多人以为else是和年龄检查配对的,其实它是和最近的if(邀请码检查)配对的。这样一来,消息就会乱弹。建议永远都加大括号——哪怕里面只有一行!

为了不让你误会,我再演示一下。编译器其实是这样理解上面代码的:

if (age >= 21)
{    
    if (code == "VIP2024")
        Console.WriteLine("欢迎!");
else
    Console.WriteLine("邀请码错了。");
}    

重要!再强调一次:
如果if-else结构没加大括号,else只会和它前面最近的if配对。

4. 替代方案:嵌套条件里的else if

有时候你在外层if里不光想检查一个条件,还想给出别的选择。比如邀请码不对,可以让用户买票。这就要用嵌套的else if/else结构:

if (age >= 21)
{
    Console.Write("请输入邀请码: ");
    string code = Console.ReadLine();

    if (code == "VIP2024")
    {
        Console.WriteLine("欢迎来到俱乐部!");
    }
    else if (code == "GUEST")
    {
        Console.WriteLine("访客模式:只能玩到23:00。");
    }
    else
    {
        Console.WriteLine("抱歉,不能进。");
    }
}
else
{
    Console.WriteLine("21岁以上才能进。");
}

这个例子里我们在嵌套里做了三种选择:VIP码、访客码和拒绝。

5. 实战:多层逻辑的折扣计算器

我们来写个小程序:用户在商店买东西,根据年龄和有没有会员卡来给折扣。

  • 如果用户年龄大于等于60——折扣15%
  • 如果年龄不到,但有会员卡——折扣7%
  • 其他情况没有折扣。

怎么写?

Console.Write("请输入你的年龄: ");
int age = int.Parse(Console.ReadLine());

double discount = 0.0;

if (age >= 60)
{
    discount = 0.15;
}
else
{
    Console.Write("你有会员卡吗(是/否)? ");
    string hasCard = Console.ReadLine();

    if (hasCard == "是")
    {
        discount = 0.07;
    }
}

Console.WriteLine("你的折扣: " + (discount * 100) + "%");

这里我们在else分支里用了嵌套if。只有年龄不够时才问会员卡。

2
任务
C# SELF, 第 3 级, 课程 2
已锁定
游乐设施年龄检查
游乐设施年龄检查
2
任务
C# SELF, 第 3 级, 课程 2
已锁定
计算电影票价
计算电影票价
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION