黑马程序员技术交流社区
标题:
看着个switch的问题
[打印本页]
作者:
heheka123
时间:
2014-4-22 14:41
标题:
看着个switch的问题
class Demo4
{
public static void main(String[] args)
{
int x = 1,y=2;
switch(x)
{
default:
y++;
case 2:
y++;
case 3:
y++;
}
System.out.println("y="+y);
}
}
复制代码
打印出来怎么变成:y=5了呢, 我觉得应该是3啊,下面的怎么还执行呢
作者:
二小傻
时间:
2014-4-22 14:44
每一个分支下面添加break;不然会继续执行的
作者:
tacyjay在路上
时间:
2014-4-22 14:46
本帖最后由 tacyjay在路上 于 2014-4-22 14:50 编辑
看看这个吧
http://bbs.itheima.com/forum.php ... 29&page=1#pid678556
还是给你贴一下,我的回答吧
switch有两种
结束
方式,即“
break;
”或者“
}
”,
跟case和default位置无关
,不过都是从
case开始判断
读起的。
第一种情况,
有default
,
先判断case值
,则先读 case 2: y++; case3: y++; 都不满足,所以去执行default: y++;此时y=3;
由于没有遇到“break;”或者“}”,并且还有case2,case3语句没完成,所以
运算
继续
向下执行
,
不再判断case的值
,所以执行case 2: y++; 此时y=4,然后case 3: y++; 此时y=5,遇到“}”,
结束switch语句,输出y=5.
第二种情况,
无default
,
先判断case值
,不满足,再到default,没有,直接跳出switch,
y不变
,输出 y=3.
毕老师day-02-19里讲的很清楚,楼主可以再看看。
作者:
阿旺
时间:
2014-4-22 14:48
switch语句的基本语法:
switch(表达式){
case 常量表达式1: 语句序列1
[break;]
case 常量表达式2: 语句序列2
[break;]
……
case 常量表达式n: 语句序列n
[break;]
default: 语句序列n+1
[break;]
}
作者:
wyqs92
时间:
2014-4-22 15:35
因为switch(x)先判断case中有没有x的值,在此段程序中没有,它就去执行default。但是你的代码中没有break语句,程序就继续向下执行了。。
class Demo4
{
public static void main(String[] args)
{
int x = 1,y=2;
switch(x)
{
default:
y++; //x=3
case 2:
y++; //x=4
case 3:
y++; //x=5
}
System.out.println("y="+y);
}
}
复制代码
作者:
々白点潜心ザ
时间:
2014-4-22 15:44
switch的结束的标志一共有两种:
1、
case中执行完有break;
2、
执行到"}",判断结束。
这道题目中首先需要判断x的值,看是否有case 1对应的语句,题目中并没有,所以执行default对应的语句。
在执行完default的语句后,即y++,y自增一个,y=3;
此时,
不再对x进行判断而是执行剩下所有的语句
,即,y会自增两次,得到y=5;
:)
作者:
千殇轮回
时间:
2014-4-22 16:13
本帖最后由 千殇轮回 于 2014-4-22 16:16 编辑
int x = 1,y=2;
switch(x)
{
default:
y++;//因为没有case和x的值匹配,所以先执行这一语句,y的值就为3
case 2:
y++;//因为default语句后面没有加break,所以程序继续向下执行,y的值就为4
case 3:
y++;//因为case 2语句后面没有加break,所以程序继续向下执行,y的值就为5,到了这程序
已经是switch 最后一行,所以switch 执行完毕
作者:
黄晓鑫
时间:
2014-4-22 16:31
你加一个输出语句就知道了 先走的case语句 没有默认值 再走default
作者:
彭飞
时间:
2014-4-22 20:44
这个。。。。
因为没有结束语句,所有程序挨个执行了一遍,也就是y++了3次,也就是5咯
楼主对switch 还不够熟悉。
对switch的知识在多看看吧。
作者:
四川男人
时间:
2014-4-23 00:26
class Demo4
{
public static void main(String[] args)
{
int x = 1,y=2;
switch(x) //此处x=1,没有匹配到。进入default执行y++,然后y++后面没有break,程序继续执行,
//直到switch代码块儿结束,所以y=5;
{
default:
y++;
case 2:
y++;
case 3:
y++;
}
System.out.println("y="+y);
}
}
作者:
爱翚
时间:
2014-4-23 07:50
由于没加break造成了所有y++都被执行了一遍
碰到这种问题如果不理解,我个人的经验是多加几个输出语句,然后就一目了然了。
class Demo4{
public static void main(String[] args) {
int x = 1, y = 2;
switch (x){
default:
System.out.println("defaultheady=" + y);//y=2
y++;
System.out.println("defaulty=" + y);//y=3
case 2:
System.out.println("case2heady=" + y);//y=3
y++;
System.out.println("case2y=" + y);//y=4
case 3:
System.out.println("case3heady=" + y);//y=4
y++;
System.out.println("case3y=" + y);//y=5
}
System.out.println("y=" + y);//y=5
}
}
作者:
雪碧拌米饭
时间:
2014-4-23 08:53
本帖最后由 雪碧拌米饭 于 2014-4-23 08:55 编辑
public static void main(String[] args)
{
int x = 1,y=2;
switch(x)
{
default:
y++;
break;
case 2:
y++;
break;
case 3:
y++;
break;
}
System.out.println("y="+y);
}
这样就可以了,少break语句。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2