为什么需要条件语句?
想象一下现实生活中和游戏的场景:
- 如果外面下雨,就带伞。
- 如果血量小于等于0,就死亡。
- 如果考试分数大于等于 60,就及格了,否则就不及格。
- 如果你是 VIP 会员,就打 8 折,否则如果你是普通会员,就打 9 折,否则不打折。
程序也需要这种做决策的能力。条件语句允许我们根据某个条件 (Condition) 是否为真 (true) 或 假 (false) 来决定执行哪些代码块。
比较运算符
要形成条件,我们首先需要比较不同的值。比较运算符用于比较两个值,并返回一个布尔 (bool) 结果 (true 或 false)。
- == (等于): 判断两个操作数的值是否相等。
- 极其重要: 两个等于号 == 用于比较,一个等于号 = 用于赋值!初学者非常容易混淆!
- 例子:5 == 5 结果是 true; age == 18 判断 age 变量的值是否等于 18。
- != (不等于): 判断两个操作数的值是否不相等。
- 例子:5 != 3 结果是 true; name != "admin" 判断 name 变量的值是否不是 "admin"。
- > (大于): 判断左操作数是否大于右操作数。
- 例子:10 > 5 结果是 true。
- < (小于): 判断左操作数是否小于右操作数。
- 例子:3 < 8 结果是 true。
- >= (大于等于): 判断左操作数是否大于或等于右操作数。
- 例子:5 >= 5 结果是 true; score >= 60 判断 score 是否及格。
- <= (小于等于): 判断左操作数是否小于或等于右操作数。
- 例子:4 <= 7 结果是 true。
示例代码:
int myAge = 25;
int yourAge = 30;
string myName = "Alice";
bool isAgeEqual = (myAge == yourAge); // false
bool isAgeNotEqual = (myAge != yourAge); // true
bool isOlder = (myAge > yourAge); // false
bool isYoungerOrEqual = (myAge <= yourAge); // true
bool isNameAlice = (myName == "Alice"); // true
Console.WriteLine($"myAge == yourAge: {isAgeEqual}");
Console.WriteLine($"myAge != yourAge: {isAgeNotEqual}");
Console.WriteLine($"myAge > yourAge: {isOlder}");
Console.WriteLine($"myAge <= yourAge: {isYoungerOrEqual}");
Console.WriteLine($"myName == \"Alice\": {isNameAlice}"); // \" 用于在字符串中表示双引号本身
if 语句:满足条件才执行
if 语句是最基本的条件控制。它检查一个条件,如果条件为 true,就执行紧跟其后的代码块。
基本语法:
if (condition) // condition 必须是一个结果为 bool 的表达式
{
// 条件为 true 时执行的代码块
// 可以有一条或多条语句
}
// 如果条件为 false,则跳过大括号 {} 中的代码块,继续执行后面的代码
代码示例:
int temperature = 30;
if (temperature > 25)
{
Console.WriteLine("天气炎热,注意防暑!");
Console.WriteLine("建议开空调。");
}
Console.WriteLine("程序继续执行..."); // 这行代码无论如何都会执行
在这个例子中,因为 temperature (30) 大于 25,所以 if 后面的大括号里的两行 Console.WriteLine 都会被执行。如果 temperature 是 20,那么这两行就会被跳过。
注意 (代码块加大括号):
- 强烈建议 即使 if 后面只有一条语句,也要始终使用大括号 {} 把代码块包起来。这能提高代码可读性,并且在以后添加更多语句时不容易出错。
// 不推荐的写法 (虽然合法,但容易出错)
// if (temperature > 25)
// Console.WriteLine("天气炎热!"); // 只有这一行受 if 控制
// Console.WriteLine("建议开空调。"); // 这一行无论如何都会执行,缩进有误导性!
// 推荐的写法
if (temperature > 25) {
Console.WriteLine("天气炎热!");
}
if-else 语句:二选一
if-else 语句提供了一个“否则”的选项。如果 if 的条件为 true,执行 if 的代码块;如果条件为 false,则执行 else 的代码块。
基本语法:
if (condition)
{
// 条件为 true 时执行的代码块
}
else // 不需要条件,表示 if 条件不满足时的情况
{
// 条件为 false 时执行的代码块
}
代码示例:
int score = 55;
if (score >= 60)
{
Console.WriteLine("恭喜,你及格了!");
}
else
{
Console.WriteLine("很遗憾,你没有及格,请继续努力!");
}
在这个例子中,因为 score (55) 小于 60,所以 if 的条件为 false,程序会跳过 if 的代码块,执行 else 代码块里的语句。
if-else if-else 语句:多选一
当你有多个互斥的条件需要判断时,可以使用 if-else if-else 结构。它会按顺序检查条件:
- 如果第一个 if 条件为 true,执行它的代码块,然后跳过整个 else if 和 else 部分。
- 如果第一个 if 条件为 false,则检查第一个 else if 的条件。如果为 true,执行它的代码块,然后跳过后面的部分。
- 依次检查后续的 else if。
- 如果所有的 if 和 else if 条件都为 false,则执行最后的 else 代码块 (最后的 else 是可选的,如果没有 else 并且所有条件都不满足,则整个结构什么也不执行)。
基本语法:
if (condition1)
{
// condition1 为 true 时执行
}
else if (condition2)
{
// condition1 为 false, 且 condition2 为 true 时执行
}
else if (condition3)
{
// condition1 和 condition2 都为 false, 且 condition3 为 true 时执行
}
// ... 可以有更多的 else if
else
{
// 以上所有条件都为 false 时执行 (可选)
}
代码示例:
int studentScore = 85;
char grade;
if (studentScore >= 90)
{
grade = 'A';
}
else if (studentScore >= 80) // 隐含条件:score < 90
{
grade = 'B';
}
else if (studentScore >= 70) // 隐含条件:score < 80
{
grade = 'C';
}
else if (studentScore >= 60) // 隐含条件:score < 70
{
grade = 'D';
}
else // 隐含条件:score < 60
{
grade = 'F'; // 不及格
}
Console.WriteLine($"你的成绩等级是:{grade}"); // 输出 B
else if 的顺序很重要。如果把 else if (studentScore >= 60) 放在最前面,那么 85 分也会满足 >= 60,程序就会错误地判定为 D 等级,然后跳过后面的判断。
逻辑运算符
有时候我们需要组合多个条件。例如,“伤害范围: 大于18,并且小于60”。这时就需要逻辑运算符。它们也返回 bool 值。
- && (逻辑与 AND): 当两个条件都为 true 时,结果才为 true。
- 例子:condition1 && condition2
- || (逻辑或 OR): 当至少一个条件为 true 时,结果就为 true。
- 例子:condition1 || condition2
- ! (逻辑非 NOT): 反转一个布尔值。true 变成 false,false 变成 true。
- 例子:!condition
示例代码:
int userAge = 20;
bool hasLicense = true;
bool isAdmin = false;
// 检查是否可以开车 (年龄 >= 18 并且 有驾照)
if (userAge >= 18 && hasLicense)
{
Console.WriteLine("你可以合法开车。");
}
else
{
Console.WriteLine("你不满足开车条件。");
}
// 检查是否需要显示特殊菜单 (是管理员 或者 年龄大于 60)
if (isAdmin || userAge > 60)
{
Console.WriteLine("显示特殊菜单。");
}
else
{
Console.WriteLine("显示普通菜单。");
}
// 检查是否未毕业 (使用 !)
bool isGraduated = false;
if (!isGraduated) // 等同于 if (isGraduated == false)
{
Console.WriteLine("你还是学生。");
}
嵌套 if 语句 (Nested If)
你可以在一个 if 或 else 代码块内部再包含另一个 if 语句,这称为嵌套 if。
代码示例:
bool isLoggedIn = true;
bool isUserAdmin = false;
if (isLoggedIn)
{
Console.WriteLine("用户已登录。");
// 在登录的基础上,再判断是否是管理员
if (isUserAdmin)
{
Console.WriteLine("欢迎管理员!");
}
else
{
Console.WriteLine("欢迎普通用户!");
}
}
else
{
Console.WriteLine("请先登录。");
}
过多的嵌套会让代码变得复杂难懂,应尽量避免。有时候可以通过使用逻辑运算符 && 来简化嵌套 if。例如,上面的内层 if 可以思考是否能用 isLoggedIn && isUserAdmin 来判断。
学了那么久,该你实践了!
打开你之前的项目,把之前写的代码注释掉,并分好类,开始写这节练习:
- 判断数字正负零: 定义一个 int 变量 number,使用 if-else if-else 判断它是正数、负数还是零,并输出相应的信息。
- 判断偶数奇数: 定义一个 int 变量 num,使用 if-else 和取模运算符 % 判断它是偶数还是奇数。
- 判断闰年: 定义一个 int 变量 year。判断它是否是闰年。闰年的条件是:
- 能被 4 整除,但不能被 100 整除。
- 或者 能被 400 整除。
- 你需要组合使用 && 和 || 运算符。 (提示: (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
- 模拟登录: 定义两个 string 变量 username 和 password。使用 if 语句判断输入的用户名和密码是否等于预设的正确值(比如 "admin" 和 "123456"),如果是,则输出 "登录成功",否则输出 "用户名或密码错误"。
尝试编写这些代码,并用不同的输入值测试它们!
Comments NOTHING