【DotNet 技能系列】8. C#中的If Else If 误用与正确使用
题目:对学员的结业考试成绩进行评测
成绩>=90: A
90>成绩>=80: B
80>成绩>=70:C
70>成绩>=60:D
解法1:没有理解if Else if本质,而且这种错误很容易犯
if (score >= 90) // 条件1 { Console.WriteLine("A"); } else if (80 =< score && score < 90) //条件2 这里的score<90根本不执行,没有理解if else if的本质 { Console.WriteLine("B"); } // ...
上面的写法实际上没有理解if else if的本质
if else if的本质是:如果if条件不满足则执行Else中的条件判断。基于这个理解,上面的if语句条件1不满足的话,实际上就意味着score《90
所以条件2中的子条件score<90是多次一举!
或者else if (score<90 && score <=80) ,这里的Score<90 在条件1为假后,肯定为真!
解法2:数学思维,编译通不过
if (80 <= score < 90) // BUILD ERROR: Operator '<' cannot be applied to operands of type 'bool' and 'int' { Console.WriteLine("B"); }
正确写法
Console.WriteLine("请输入的你的成绩"); int score = Convert.ToInt32(Console.ReadLine()); if (score >= 90) { Console.WriteLine("A"); } else if (score >= 80) { Console.WriteLine("B"); } else if (score >= 70) { Console.WriteLine("C"); } else if (score >= 60) { Console.WriteLine("D"); }
题目:比较用户名和密码是否正确并输入相应的提示
提示用户输入用户名,然后再提示用户输入密码,如果用户名是"admin"和密码是"888888",那么提示正确
否则,如果用户名不是Admin,则提示用户名不存在,如果用户名是Admin则提示密码不正确.
static void Main(string[] args) { Console.WriteLine("请输入用户名"); string username = Console.ReadLine(); Console.WriteLine("请输入密码"); string password = Console.ReadLine(); if (username == "admin" && password == "888888") { Console.WriteLine("密码正确"); } else { if (username != "admin") { Console.WriteLine("用户名不正确"); } else if (password != "888888") { Console.WriteLine("密码不正确"); } } Console.ReadKey(); }
上面的写法,是Else里面嵌套了If Else。下面采用另外一种写法,是If Else If Else
class Program { static void Main(string[] args) { Console.WriteLine("请输入你的用户名"); string username = Console.ReadLine(); Console.WriteLine("请输入你的密码"); string password = Console.ReadLine(); // 下面的If Else If Else 可以成对理解,比如else if else 还是可以作为一个来理解 if (username == "admin" && password == "888888") { Console.WriteLine("用户名和密码正确"); } else if (username != "admin") { Console.WriteLine("用户名不正确"); } else // 注意理解上面If Else If { Console.WriteLine("密码不正确"); } Console.ReadKey(); } }
If Else 语句是否使用{}
通常if表达式后只有一个语句的话,不使用{}.同样的下面的形式却有不同的结果.
if (true) string test ="test"; // 这个会发生编译错误! if (true) { string test = "test"; // 这样子的写法正确 }
Else与靠近If结合
如果if 表达式后面只有一个语句,通常会不写{},但是这个习惯也可能导致程序出现BUG,比如下面的代码
class Program { static void Main(string[] args) { int age = 15; char sex = 'f'; if (age <10) if (sex == 'f') Console.WriteLine("小女人"); else //注意else只和最近if结合,所以这道题什么都不输出 Console.WriteLine("你长大了"); Console.ReadKey(); } }
总结:在实际情况下,通常以为自己会If Else,但是实际上If Else的组合起来可以构造非常复杂的业务逻辑.而且好的
If Else组合一看就明白业务含义,但是差的If Else就容易误导或者非常难理解这段If Else的含义.
总之一句话,多多练习怎么用语言来表达If Else的含义.只有这样才能理解了程序的业务逻辑和业务规则怎么用编程语言来描述.
最后:If Else 和While的使用水平高低决定你编程能力的高低!
程序只有顺序,分支,循环三种基本结构.熟练掌握这些基本结构非常重要.