Menu
CoddyTech

扁平化嵌套条件语句

本课属于 Coddy C# 学习旅程的“逻辑与流程”单元。第 22 课,共 66 课。

嵌套的条件语句会让代码难以阅读和维护。扁平化可以减少缩进层级,提高代码的可读性。

下面是一个多层嵌套条件语句的示例:

if (userLoggedIn)
{
    if (userHasPermission)
    {
        if (fileExists)
        {
            // 处理文件
            ProcessFile();
        }
        else
        {
            Console.WriteLine("File not found");
        }
    }
    else
    {
        Console.WriteLine("No permission");
    }
}
else
{
    Console.WriteLine("Not logged in");
}

我们可以使用提前返回或守卫子句来简化这段代码:

if (!userLoggedIn)
{
    Console.WriteLine("Not logged in");
    return;
}

if (!userHasPermission)
{
    Console.WriteLine("No permission");
    return;
}

if (!fileExists)
{
    Console.WriteLine("File not found");
    return;
}

// 处理文件
ProcessFile();

注意,扁平化后的代码缩进更少,也更容易理解。

challenge icon

挑战

简单

检查奖学金资格时,层层嵌套的条件语句会让代码难以阅读和维护。在这个挑战中,你要使用保护子句,将杂乱的嵌套条件结构改写成简洁易读的代码。

保护子句是一条提前返回的语句,可以立即处理特定条件,让函数的其余部分专注于“顺利路径”。

请根据以下规则,完成 CheckScholarshipEligibility 方法中尚未实现的保护子句:

  1. 如果年龄小于 17,立即返回 "Not eligible due to age requirement"
  2. 如果 GPA ≥ 3.5 且学生有推荐信,则授予全额奖学金
  3. 如果 GPA ≥ 3.8,则授予全额奖学金(即使没有推荐信也可以)
  4. 如果 GPA ≥ 3.0 且学生有推荐信,则授予部分奖学金
  5. 如果 GPA 在 3.5 到 3.8 之间,则授予部分奖学金
  6. 其他所有情况都返回 "Not eligible for scholarship"

亲手试试

using System;

class Program
{
    public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
    {
        // 年龄要求的卫语句
        if (age < 17)
        {
            Console.WriteLine("Not eligible due to age requirement.");
            return;
        }
        
        // 有推荐信时全额奖学金的卫语句
        if (/* 补全这个条件 */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // GPA 特别高时全额奖学金的卫语句
        if (/* 补全这个条件 */)
        {
            Console.WriteLine("Full scholarship granted!");
            return;
        }
        
        // 有推荐信时部分奖学金的卫语句
        if (/* 补全这个条件 */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // GPA 良好时部分奖学金的卫语句
        if (/* 补全这个条件 */)
        {
            Console.WriteLine("Partial scholarship granted.");
            return;
        }
        
        // 默认情况:不符合资格
        Console.WriteLine("Not eligible for scholarship.");
    }
    
    static void Main(string[] args)
    {
        // 用于即时反馈的测试用例
        Console.WriteLine("Test Case 1: Age 16, GPA 4.0, Has Recommendation: True");
        CheckScholarshipEligibility(16, 4.0, true);
        
        Console.WriteLine("\nTest Case 2: Age 18, GPA 3.9, Has Recommendation: False");
        CheckScholarshipEligibility(18, 3.9, false);
        
        Console.WriteLine("\nTest Case 3: Age 17, GPA 3.6, Has Recommendation: True");
        CheckScholarshipEligibility(17, 3.6, true);
        
        Console.WriteLine("\nTest Case 4: Age 19, GPA 3.2, Has Recommendation: True");
        CheckScholarshipEligibility(19, 3.2, true);
        
        Console.WriteLine("\nTest Case 5: Age 18, GPA 2.8, Has Recommendation: False");
        CheckScholarshipEligibility(18, 2.8, false);
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C# 在线编译器