黑马程序员——if -else / switch-case

分别用if-else和switch-case(主要演示)来搞定同个工作

题: //李四的年终工作评定,如果定位A级,则工资涨500元,如果B,则涨200,如果C,工资不变,如果D,降200,如果E,降500。设李四原工资5000,请输入评级,然后显示李四的工资。

1) 用if-else来搞定

if-else 
 1 Console.WriteLine("请输入你对李四的评定等级(A-E)");
 2             string input = Console.ReadLine();
 3             decimal salary = 5000m;//加m表示5000为decimal类型,不加表示int类型。加不加都可以,加是最好的
 4           
 5             if (input == "A")
 6             {
 7                 //salary = salary + 500;    
 8                 salary += 500;//这样比较简单,让salary这个变量自己加了500
 9 
10             }
11             else if (input == "B")
12             {
13                 salary += 200;
14             }
15             else if (input == "C")
16             {
17             }
18             else if (input == "D")
19             {
20                 salary -= 200;
21             }    
22             else if (input == "E")
23             {
24                 salary -= 500;
25             }
26             else
27             {
28                 Console.WriteLine("输入有误,只能输入大写ABCDE");
29                 
30             }
31            
32                 Console.WriteLine("李四的工资为:" + salary);
33           
34                 Console.ReadKey();


调试中,出现两个bug。
如果输入的范围不在A~E内,如输入个‘T’值或者小写字母,都会显示李四工资为5000。

解决方案:定义一个bool类型,来判断执行哪个语句。
处理完代码:

调试完成后的代码
 1  Console.WriteLine("请输入你对李四的评定等级(A-E)");
 2             string input = Console.ReadLine();
 3             decimal salary = 5000m;//加m表示5000为decimal类型,不加表示int类型。加不加都可以,加是最好的
 4             bool flag = false;
 5             if (input == "A")
 6             {
 7                 //salary = salary + 500;    
 8                 salary += 500;//这样比较简单,让salary这个变量自己加了500
 9 
10             }
11             else if (input == "B")
12             {
13                 salary += 200;
14             }
15             else if (input == "C")
16             {
17             }
18             else if (input == "D")
19             {
20                 salary -= 200;
21             }
22             else if (input == "E")
23             {
24                 salary -= 500;
25             }
26             else
27             {
28                 Console.WriteLine("输入有误,只能输入大写ABCDE");
29                 flag = true;
30             }
31             if (flag == false) 
32             {
33                 Console.WriteLine("李四的工资为:" + salary);
34             }
35                 Console.ReadKey();
36         }

 //用switch-case实现上面功能
switch-case的语法:

switch(表达式)
    case值1:语句块1;
    break;(在其他编程语言中不加break可能只会使程序报错,但在c#中break是必须加的,不然就会出错)
    case值2:语句块2;
    break;
    default:语句块3;
    break;
switch-case
 1 Console.WriteLine("请输入你对李四的评定等级(A-E)");
 2             string input = Console.ReadLine();
 3             decimal salary = 5000;
 4             bool flag = false;
 5             switch (input)//输入的值如果与input的值想匹配则执行下面A~E的值,如果不匹配则执行default的内容
 6             { 
 7                 case"A":
 8                     salary+=500;
 9                     break;
10                 case"B":
11                     salary+=200;
12                     break;
13                 case"C":
14                     break;
15                 case"D":
16                     salary -= 200;
17                     break;
18                 case "E":
19                     salary -= 500;
20                     break;
21                 default:
22                     Console.WriteLine("你的输入有问题");
23                     flag = true;
24                     break;
25             }
26             if (flag == false)
27             {
28                 Console.WriteLine("李四的工资为" + salary);
29             }
30                 Console.ReadKey();
31         }

 -------

switch-case的执行过程:

执行过程:首先计算表达式,然后根据计算结果去匹配case后面的值。如果有匹配,则执行匹配后面的语句,直到break语句跳出switch-case。如果所有的case值都不匹配,那么有default则执行default后面的语句,直到break结束。如果没有default则跳出switch-case,什么都不执行

 

问题:
把       default:
                    Console.WriteLine("你的输入有问题");
                    flag = true;
                    break;移到caseB下面。输入T,会显示什么?
//default移到哪都没关系。只有当找不到匹配项的时候,才会走default。跟default的位置没有关系!

 

 

 

详细请查看http://edu.csdn.net/heima/

posted @ 2013-05-05 10:56  -112  阅读(293)  评论(0编辑  收藏  举报