黑马程序员技术交流社区

标题: 学习swith-case语句时 犯了两个小错误 [打印本页]

作者: 杨礼文    时间: 2012-2-29 12:58
标题: 学习swith-case语句时 犯了两个小错误
Console.WriteLine("请输入你对李四评定的等级?(A-E)");

            string input1 = Console.ReadLine();
            decimal salary1 = 5000m;
            bool isRight = false;
            switch (input1)
            {
                case "A":
                    salary1 += 500;
                    break;
                case "B":
                    salary1 += 200;
                    break;
                case "C":

                    break;
                case "D":
                    salary1 -= 200;
                    break;
                case "E":
                    salary1 -= 500;
                    break;
                default:// 匹配时和位置没有关系,只和值有关系
                    Console.WriteLine("你的输入有问题");

                    isRight = true;

                    break;
            }
            if (isRight == false)
            {
                Console.WriteLine("李四的工资为:" + salary1);
            }
            Console.ReadKey();

这是正确的代码
作者: 杨礼文    时间: 2012-2-29 13:00
这是swith-case的执行过程
执行过程:首先计算表达式,然后根据计算结果与匹配case后面的值,如果有匹配项,则执行匹配项后面的语句,直到break语句跳出switch-case.如果所有的case值都不匹配,那么有default则执行default后面的语句,直到break结束,如果没有default,则跳出switch-case,什么都不执行.
作者: 贾宁    时间: 2012-2-29 13:06
Console.WriteLine("请输入你对李四评定的等级?(A-E)");

            string input1 = Console.ReadLine();
            decimal salary1 = 5000m;
            switch (input1)
            {
                case "A":
                    salary1 += 500;
                    break;
                case "B":
                    salary1 += 200;
                    break;
                case "C":

                    break;
                case "D":
                    salary1 -= 200;
                    break;
                case "E":
                    salary1 -= 500;
                    break;
                default:
             Console.WriteLine("你的输入有问题");
                    break;
            }
                Console.WriteLine("李四的工资为:" + salary1);
                Console.ReadKey();
简化成这样也ok吧



作者: 杨礼文    时间: 2012-2-29 13:12
第一个错误: if (isRight == false) 把== 写成了=号 虽然运行不出错 但运行的结果出错.  ==是等于的意思  =是赋值的意思
第二个错误:把isRight = true;写在看break;之后,应写在default和brea之间.

0基础的童鞋们 自学视频时切莫急躁,切莫贪求速度.敲代码时 应三步一回头,打好基础,在c#中多个少个错个符号 意思将不再相同.将低级的错误扼杀在小心仔细心态的摇篮中.


作者: 杨礼文    时间: 2012-2-29 13:21
bool isRight = false;
isRight = true;
if (isRight == false)

之前一直都不明白上面三句代码的意思,睡觉时想了下 想通了   

第一句 定义一个bool类型且赋值,
第二句 对isRight 重新赋值 目的是执行到这句代码 sRight的值变成true 不再是 false,是为了 不再执行后面if的语句
第三句  if (isRight == false)  当不执行default语句,则isRight的值没有变 仍然是false , 即可执行if语句.


后来为了验证我的想法  我用:
int a=0

a=1

if(a==0)

也可以实现.
作者: 杨礼文    时间: 2012-2-29 13:26
本帖最后由 杨礼文 于 2012-2-29 13:27 编辑
贾宁 发表于 2012-2-29 13:06
Console.WriteLine("请输入你对李四评定的等级?(A-E)");

            string input1 = Console.ReadLine( ...


不ok  当你输入ABCDE之外的数字字母时  会显示  
                 你的输入有问题
                 李四的工资为5000




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2