A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马无敌 中级黑马   /  2015-7-11 10:43  /  18960 人查看  /  83 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2黑马币
default可以写在switch结构中的任意位置;如果将default语句放在了第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。

我想问下上面这句话是不是错的,这,我发现这个不对,不知道是不是我搞错了。。。求解释。。。。。。。。。

最佳答案

查看完整内容

首先你是对的! 选择结构switch语句 switch语句格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; … default: ...

83 个回复

倒序浏览
首先你是对的!
选择结构switch语句
        switch语句格式:
                switch(表达式) {
                        case 值1:
                                语句体1;
                                break;
                    case 值2:
                                语句体2;
                                break;
                    …
                    default:        
                                语句体n+1;
                                break;
                }
        格式解释
                switch表示这是switch语句
                表达式的取值:byte,short,int,char
                JDK5以后可以是枚举
                JDK7以后可以是String
                case后面跟的是要和表达式进行比较的值
                语句体部分可以是一条或多条语句
                break表示中断,结束的意思,可以结束switch语句
                default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

        执行流程
                首先计算出表达式的值
                其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
                最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

        注意事项
                case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
                default可以省略吗?
                        可以省略。一般不建议。除非判断的值是固定的。(单选题)
                break可以省略吗?
                        可以省略,一般不建议。否则结果可能不是你想要的
                default的位置一定要在最后吗?
                        可以出现在switch语句任意位置。
                switch语句的结束条件
                        遇到break
                        执行到程序的末尾
        
回复 使用道具 举报
形而上孤独 来自手机 中级黑马 2015-7-11 14:51:14
藤椅
学习一下
回复 使用道具 举报
恩恩,学习学习,就是先执行case,再执行default,default未必会执行么??
回复 使用道具 举报
本帖最后由 αメ炫 于 2015-7-11 18:08 编辑

部分对部分不对,为了还原本来的执行顺序,下面代码我都不写break,因为break破坏了正常顺序和正常思维

switch执行分两步,先找匹配的case,然后进入代码区,没有匹配到case则通过default进去代码区

记住两点1.case default的匹配工作只做一次 2.一旦进入代码区,就是从头执行到尾直到遇到break

例1:
int a=1;
switch (a) {

        default:
            printf("exe default\n");
            
        case 1:
            printf("exe case 1\n");
   
        case 2:
            printf("exe case 2\n");
            
    }
结果:
exe case 1
exe case 2

如果匹配不到case 就走default进入代码区,代码区是啥?就是除了前面case default剩下的部分

int a=1;
    switch (a) {
            
        default:
            printf("exe default\n");
            
        case 2:
            printf("exe case 2\n");
   
        case 3:
            printf("exe case 3\n");
               
    }

这里没有匹配到case就从default进入代码区,代码区就是

            printf("exe default\n");
            
            printf("exe case 2\n");
   
            printf("exe case 3\n");

所以结果就是
exe default
exe case 2
exe case 3

你这样放

        case 2:
            printf("exe case 2\n");
   
        default:
            printf("exe default\n");

        case 3:
            printf("exe case 3\n");

没有匹配到case从default进入代码区
结果就是
exe default
exe case 3

这就是switch本来应该执行的顺序,每个case后面的代码本来都是连在一起的,代码部分就是一个整体,从头执行到尾

可是代码区里面插入了break,打破规则,让每个case独立感觉像是一个分支,执行完就结束

printf("exe case 2\n");
break;
printf("exe default\n");
break;
printf("exe case 3\n");
break;

有了break的代码区变成了一段一段的,从而产生错觉,感觉像是分支,还纠结究竟执行哪个,其实没有break捣蛋,只要进入代码区,管它啥从头执行到尾
回复 使用道具 举报
段培峰 来自手机 中级黑马 2015-7-11 18:15:14
地板
不管default放哪都是先执行case的,case不匹配才执行default。之后,如果default不是放在末尾,则执行default下面的case,遇到break或者}就退出。
回复 使用道具 举报
Poskey 来自手机 中级黑马 2015-7-11 21:06:25
7#
选择语句
回复 使用道具 举报
switch中首先找case 中匹配的value值,如果匹配 直到遇到break跳出switch,如若不匹配则会依次找匹配的value 如果都不匹配最后去执行default语句 然后遇到break跳出switch,如果在遇到break之前中间夹杂很多case语句 不判断直接执行里面的语句
回复 使用道具 举报
这句话是错的,你是对的,不论default放在前面后面?都先读case,case读完,才能读它
回复 使用道具 举报
这句话是不对的,无论default放在switch语句的任何位置,都是从case1开始匹配,如果有符合条件的自然执行对应的执行语句,如果所有case都匹配失败,则执行default。无论是case还是default一旦被执行且执行语句后面没有break,则程序不会停止,而且执行下面所有可以执行的语句,无需任何判断条件。
回复 使用道具 举报
kime 中级黑马 2015-7-11 23:43:21
11#
case之间与default没有顺序
回复 使用道具 举报
ALin 中级黑马 2015-7-11 23:49:13
12#
int a=1;
switch (a) {

                     
         case 1:
             printf("\n");
     
         case 2:
             printf("\n");

       default:
             printf(" default\n");

            
     }
回复 使用道具 举报
我们老师曾经举过一个例子,记得不太清了,大概就是:把switch语句看成仓库; break 看成仓库管理员;Case 就是仓库内的门;而 default 就是仓库的后门,里面放着打开其他门的钥匙。当函数运行的时候,不管default在前面还是在后面都是先对case语句判断。
假如default在最前面的情况,而其他门(case)都打不开,那么他可以从后门(default)中得到其他门的钥匙,然后依次打开其他的门,拿到里面的东西,直到遇见仓库管理员(break),把他抓住了,结束程序.
回复 使用道具 举报
defaul无论放在前面还是最后,都是最后执行的我,只有所有case都不执行时才执行defaul语句
回复 使用道具 举报
黑马和大灰狼 来自手机 中级黑马 2015-7-12 00:56:58
15#
default不管放在哪里都是最后执行的哦
回复 使用道具 举报
default可以写在switch结构中的任意位置;这句话没错。但不管default语句放在哪里,expression都会先与case中的value匹配,如果找到匹配的,那就执行相应case里面的语句,然后继续往下执行;如果没有找到匹配的case。那么就找default语句。从default开始执行,直到遇到break或者是程序结束,如果没有找到匹配的case。程序中也没有default,那么switch语句直接结束。
回复 使用道具 举报
switch case break default 这些的重要性理解
switch语句
        格式:
                switch(表达式)
                {
                        case 值1:
                                //执行语句1;
                                break;
                        case 值2:
                                //执行语句2;
                                break;
                        case 值3:
                                //执行语句3;
                                break;
                        ...
                        default:
                                //默认执行语句;
                                break;
               
                }
                表达式:
                        byte 、 short、 int 、 char
                        jdk5之后增加:枚举
                        jdk7之后增加:String
                       
                执行流程:
                        表达式的值从上往下依次匹配每一个case的值, 如果匹配上,就执行该case的执行语句,
                        如果没有匹配,就走default.
                结束条件:
                        遇到break或者执行到switch语句的末尾.

特别注意如果没有break也没有满足的case那就是这样的情况:
int x=2,y=3;
switch(x)
{
        default:
                y++;
        case 3:
                y++;
        case 4:
                y++;
}
System.out.println("y="+y);


结果是6
回复 使用道具 举报
看到那么多人 替你解答 都很对啊  
回复 使用道具 举报
当default出现在第一行时程序还是会先去从case开始去找匹配对象,当case中没有匹的,则执行default,执行完default后,程序不再判断case中的条件而是直接执行case中的语句,知道出现break。
回复 使用道具 举报
switch 中的case 只是标识一个路口,如果case标识的路口不符合switch后的表达式结果那么就执行default
回复 使用道具 举报
12345下一页
您需要登录后才可以回帖 登录 | 加入黑马