上一篇介绍了C#程序设计分支的基本概念与基本操作,这篇的主题是高级的程序分支,例如:分支的嵌套与分支是使用的场景!与三元运算符(?:),废话少说还是开始吧!
1.三元运算符【?:】
三元运算符分为三个部分:1 条件表达式 2 条件表达式成立时返回的值 3条件表达式不成立时返回的值。例如表达式为: a > 0 ? "A>0" : "A 0】 ? 2【"A>0"】 : 3【"A<0"】, 这时我将这三个部分分别表示出来就清晰很多!了解他的组成我们来看例子(用户输入一个数字,如果数字大于零就在屏幕打印该数字大于零否则屏幕输出该数字小于零):
1 Console.Write("请输入一个数字:");
2 int a = Convert.ToInt32(Console.ReadLine());
3
4 //利用三元运算符?: 根据条件获得对应结果
5 string str = a
6
7 Console.WriteLine(str);
好的按惯例我们来分析一下:
我们来看第五行代码: string str = a
首先判断用户输入的a是否大于0 ,如果大于零那么将问号(?)后面的内容给变量str,如果小于零将冒号(:)后面的值返回给变量str!
最后程序打印结果如下:
这个时候还不算完,可能大家会联想到实现该功能另几种实现方式如:
1 if (a
2 {
3 str = "该数字大于零";
4 }//代码效果参考:http://www.ezhiqi.com/zx/art_5930.html
5 else
6 {
7 str = "该数字小于零";
8 }//代码效果参考:http://www.ezhiqi.com/zx/art_2596.html
9
10
11 switch (a
12 {
13 case true:
14 str = "该数字大于零";
15 break;
16 case false:
17 str = "该数字小于零";
18 break;
19 }
这样种方式同样也实现了次功能,但是我们还能看出三元运算符在此种情境下是否大大的简化了我们的代码量?所以在程序的开发中我们可以灵活的运用三元运算符来简化我们此种类型(判断一个表达式返回对应结果)的分支场景!
2.如何选择最为合适的分支语句
好的,加上我们在上一篇介绍的两种分支结构与我们刚才介绍的三元运算符我们来看看它们之间的区别以及在实际开发中如何选择最合理的分支结构!
那么我们还是用三种情景的例子来阐述吧!
第一种:当用户输入一个数字判断是否大于零,如果大于零那么输出该数字大于零,如果小于零输出该数字小于零,也就是我们上一个例子,那么根据上边分析后我们根据三种实现方法得出选择三元运算符(?:)是最合理的解决方案,因为它大大的减少了我们满足一个功能的代码量!
第二种:用户输入一个数字代表出生年份得出他的年龄!代码如下:
1 Console.Write("请输入你的出生年份:");
2 int year = Convert.ToInt32(Console.ReadLine());
3 int sysYear = DateTime.Now.Year;
4
5 if (year
6 {
7 Console.WriteLine("该年龄不合法!");
8 }
9 else if (sysYear == year) //判断系统年份是否等于出生年份如果等于 表示刚出生0岁
10 {
11 Console.WriteLine("刚出生0岁");
12 }
13 else//否则就拿系统当前年份减去出生年份输出年龄
14 {
15 Console.WriteLine("年龄为:" + (sysYear - year).ToString());
16 }
从上边例子中我们可以看出,当系统出现一种多种可能的情况下,我们考虑用if语句是最合理的,也是最方便的!
也就是说:在系统出现多种可能如: 判断生日是否合法,判断是否是0岁等等多种可能发生的情况时考虑用IF!
第三种:那么什么时候用switch呢?当一个条件或一个变量拥有多种状态与选择时考虑有switch。看如下场景:用户输入两个数字,在输入一个运算符,运算符只能是加减乘除(+ - * /)这四种,并且计算对应的结果代码如下:
1 Console.Write("请输入第一个数:");
2 int a = Convert.ToInt32(Console.ReadLine());
3 Console.Write("请输入第二个数:");
4 int b = Convert.ToInt32(Console.ReadLine());
5
6 Console.Write("请输入运算符,只能为加减乘除【+ - * /】:");
7 string oper = Console.ReadLine();
8
9 //此时效验 用户输入的是否是 加减乘除
10 switch (oper) // 此时oper拥有多种状态,它可以使 + - * / 也可以是其他字符串
11 {
12 case "+":
13 Console.WriteLine("a + b =" + (a + b).ToString());
14 break;
15 case "-":
16 Console.WriteLine("a - b =" + (a - b).ToString());
17 break;
18 case "*":
19 Console.WriteLine("a * b =" + (a * b).ToString());
20 break;
21 case "/":
22 //这里需要注意 被除数不能为0 所以要加一个判断
23 //根据第二种情景中介绍的当出现一种或多种情况的时候用IF
24 //那么 我们就用If来判断避免这种情况
25 if (b != 0)
26 {
27 Console.WriteLine("a / b =" + (a / b).ToString());
28 }//代码效果参考:http://www.ezhiqi.com/zx/art_576.html
29