黑马程序员技术交流社区
标题:
重新复习switch,又乱了。<已解决>
[打印本页]
作者:
李月
时间:
2012-6-4 10:05
标题:
重新复习switch,又乱了。<已解决>
本帖最后由 李月 于 2012-6-5 09:39 编辑
class Demo
{
public static void main(String[] args)
{
show(1);//14
}
public static void show(int i)
{
switch(i)
{
default:
i+=2;
case 1:
i+=1;
case 4:
i+=8;
case 2:
i+=4;
}
System.out.println("i="+i);
}
}
复制代码
最后结果为什么是14呢?
谁能帮我屡1屡,说说程序执行的顺序。
作者:
梁小波
时间:
2012-6-4 10:11
从case1开始因为没有break吗!所以顺序执行
case 1:
i+=1;//2
case 4:
i+=8; //10
case 2:
i+=4;//14
就ok;累了就休息一下吗。换一下脑子
作者:
陆建平
时间:
2012-6-4 10:15
没有break语句,show(1);执行case1:i+=1;结果i=2;因为没有break语句,所以后面的case语句不用判断直接执行,接下来的执行顺序将是case4:i+=8; case2:i+=4;接下来执行输出语句System.out.println("i="+i);default:在case1之前将不会执行到。如果show(0);将执行default以及后面的语句,没有break将会从执行的那个开始按顺序执行所有语句,除非遇到跳转语句。
作者:
何旭栋
时间:
2012-6-4 10:32
没有加break,会一直往下读代码
作者:
张文建
时间:
2012-6-4 10:37
case的执行顺序:
表达式为i=1 case的值分别为 1 4 2
一:先找是否有符合表达式i=1的case语句
有,则执行case1的语句,并且不执行第一个default语句
二:case2语句中没有break语句,执行完该句就执行其他下一句,它不往回执行前一case语句)case语句直到break为止。
三:执行case4语句:i+=1-->i=2-->i+=8-->i=10
四:执行case2语句:i+=4-->i=14
至此没有break语句,则执行default语句
default语句中没有break语句,则执行其他case语句,case语句直到break为止。
default语句有break语句,则在执行完该句就跳出循环。
大家不妨在思考一下:
我把代码改了一下:
01.class Demo
02.{
03. public static void main(String[] args)
04. {
05.
06. show(
1
,0);//当j=
1
时的结果和j=
2
时的结果一样吗,为什么?
07. }
08. public static void show(int j,int
i
)
09. {
10. switch(j)
11. {
12. default:
13. i+=2;
14. case 1:
15. i+=1;
16. case 4:
17. i+=8;
18. case 2:
19. i+=4;
20. }
21. System.out.println("i="+i);
22. }
23.}
作者:
包晗
时间:
2012-6-4 12:06
switch语句,即“切换”语句;case即“情况”(毕老师的解释说:小case 就是小事情)。
break作用是跳出case. 在你完成了想要的代码后
加上break 跳出去 ,
没有break就是顺序执行
default就是如果没有符合的case就执行它,
个人理解 这个 default 可有可无 并不是必须的.
希望对你有帮助
作者:
李春阳
时间:
2012-6-4 13:10
楼主switch格式没问题~但是忘加
break
关键字了~
因而switch语句会从case 1: 开始依次加载执行下面的case~
因而最终结果为1 + 1+8+4 = 14。
修改为:
public static void show(int i)
{
switch(i)
{
default:
i+=2;
break;
case 1:
i+=1;
break;
case 4:
i+=8;
break;
case 2:
i+=4;
}
System.out.println("i="+i);
}
作者:
邹海洋
时间:
2012-6-4 15:27
哥们忘了加break ;就这么简单。建议回去看下视频 ,执行顺序的问题。
作者:
麦田守望者0812
时间:
2012-6-4 15:32
class Demo
{
public static void main(String[] args)
{
show(1);//14
}
public static void show(int i)
{
switch(i)
{
default:
i+=2;
case 1:
i+=1; 首先执行该 代码 i=2 因为case后 没有break 会接着执行下面
case 4:
i+=8; 第二 i = 10 同上 继续执行下面
case 2:
i+=4; 第三 i =14 执行下面
}
System.out.println("i="+i); 打印 i=14
}
}
复制代码
作者:
liumeng
时间:
2012-6-4 15:49
default 为什么放在后边
作者:
郭永岳
时间:
2012-6-4 17:10
首先,你要先了解switch语句的用法。
switch(表达式)
{
case 常量表达式1:语句1; break;
....
case 常量表达式n:语句n; break;
default:语句;break;
}
1、default就是如果没有符合的case就执行它,default并不是必须的.
2、case后的语句可以不用大括号.
3、switch语句的判断条件可以接受int,byte,char,short,枚举,不能接受其他类型.
4.、都没有break 语句的情况下:首先会在所有的case 语句中,寻找满足条件的语句。如果找到,会从该语句顺序向下执行每个语句;若找不到,会从第一段开始,向下顺序执行每一段语句。
5、在有break 语句的情况下:首先找到一个满足条件的case 语句执行,若找不到,会执行default 的语句。
你现在的程序是属于第4点的错误,要理解用法。所以会出现的错误跟一楼所说的现象。
QQ截图20120604170900.jpg
(15.83 KB, 下载次数: 55)
下载附件
2012-6-4 17:11 上传
作者:
邵阳
时间:
2012-6-4 18:38
刚刚看完毕向东老师讲的第二天课,刚刚将了你说的问题。同为新手我尽可能直白。
1:你的不是标准的switch语句,标准的应该是
switch(表达式)
{
case取值:
执行语句;
break;
case取值:
执行语句;
break;
........
default:
执行语句;
break;
}
2:通过对比你应该发现你的switchi语句和标准的有区别吧。
a、你的default语句放在了最前面,不过这不影响整个运算,因为case和default之间没有顺序,先执行第一个case,没有匹配的case执行default。
b、缺少break。这是造成你运算结果最主要原因,下面重点说明。
3:结束switch语句有两种情况:遇到break,遇到“}“结束。
switch(i)
11. {
12. default://不执行,因为先执行第一个case
13. i+=2;
14. case 1: //执行case
15. i+=1;//因为i+=1相当于i=i+1,又原i=1,经运算后为2
16. case 4://执行
17. i+=8; //同理i=i+8. 得i=10
18. case 2:
19. i+=4; //同理 i=14
20. }//遇到”}“结束。
21. System.out.println("i="+i);
不知道听懂没,再插一句,“+=”是一个运算符。
作者:
李月
时间:
2012-6-5 09:38
这回我晓得了。谢谢各位的热心帮助。
作者:
武剑峰
时间:
2012-6-5 12:33
呵呵,活用没有break. 也是一种启发,关键看你是否真的明白
来自:黑马程序员训练营论坛 Android客户端
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2