黑马程序员技术交流社区
标题:
运算问题
[打印本页]
作者:
宋耀冬
时间:
2013-3-26 14:37
标题:
运算问题
本帖最后由 宋耀冬 于 2013-3-27 10:08 编辑
class Demo
{
public static void main(String[] args)
{
show(0);//15
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);
}
}
这段代码是怎么执行的 我自己算的结果个打印的完全不同啊
作者:
祁振朋
时间:
2013-3-26 14:55
switch里没有break,所以,当i=0时,default,case1,case2,case4全都执行了。所以show(0)=15
当i=1的时候,default就不执行了。所以结果是14
作者:
李晓峰
时间:
2013-3-26 15:18
switch语句结束有两种情况:1.遇到break;2.执行到switch语句结束。你的代码中没有break;因此会执行到switch语句结束,所以结果为:show(0);//15;show(1);//14
作者:
刘焕新
时间:
2013-3-26 15:32
case语句里少了break语句,直接穿透了!
作者:
曾祥旭
时间:
2013-3-26 15:41
本帖最后由 曾祥旭 于 2013-3-26 19:18 编辑
这个好像毕老师的教学视频中讲到这个问题了吧?
作者:
曾祥旭
时间:
2013-3-26 15:42
(1)当传入的参数为0的时候,程序进入show方法中,先执行的是case 1,由于case 1中没有break语句,程序会一直执行下去,当读到case 2时,此时的i是13,但是,还是没有找到case 0这个条件,,所以,程序会执行default语句,我们知道default语句中有省略的break,直到这时程序结束,所以结果是15.
(2)当传入的参数为1的时候,首先程序执行的是case 1,找到了满足的条件,但是case 1中没有break语句终止,所以继续执行,当执行到case 2时,此时,i是14,遇到大括号(大括号或者分号都可以表示语句条件的结束),程序则停止运行。
作者:
陆旭东
时间:
2013-3-26 18:43
switch语句要配合break使用,否则就会在执行其中一条语句后接着执行后面的所有语句。
当i=1时,正好有case 1;由于在case后面没有break;那么从case 1;开始后面的语句都要执行1+1+8+4正好为14,这里记住你把default:放在了第一句,所以它没有执行,如果把它放在case 1;之后,这句也一样执行。
当i=0时,由于没有case 0;所以应该执行default:因为default:语句是在所有条件都不符合的时候进入执行的,而你又把它放在了第一句的位置,所以进入执行之后它之后的所有语句都要执行。所以0+2+1+8+4正好等于15.
作者:
夏凡
时间:
2013-3-26 20:15
本帖最后由 夏凡 于 2013-3-26 20:19 编辑
<strong>//正确的代码如下</strong>
class Demo
{
public static void main(String[] args)
{
show(0);
show(1);
}
public static void show(int i)
{
switch(i) //错误在于:switch中的语句后面都丢掉了 break;
{
default:
i+=2;break;
case 1:
i+=1;break;
case 4:
i+=8;break;
case 2:
i+=4;break;
}
System.out.println("i="+i);
}
}</font>
复制代码
首先,你犯了一个错误:每一个case语句之后都丢掉了 break;
正确的代码运行如下:
show(0): 由于switch中不存在 case 0,故执行 default语句,即i+=2,此时输出i=2
show(1): switch中有 case 1语句,直接执行这个语句,即i+=1,此时输出i=2
作者:
梁志兵
时间:
2013-3-26 21:15
1:switch
格式:
switch (表达式){
case 表达式里对应的值:
执行语句;
break;
case 表达式里对应的值:
执行语句;
break;
......
default:
break你漏了,default可以放在前面
作者:
余善航
时间:
2013-3-26 22:13
首先,你没有写跳出语句,
这样的情况下,当有对应case的语句时,从该case语句开始,往下所会的case都会执行
当没有对应的case语句时,那么就会找到default语句开始,从该语句往下所有的case语句都会执行
所以在default中是没有隐士的跳出功能的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2