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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 何伟超 于 2013-12-26 00:44 编辑
  1. class Switch
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 12 , y = 10 ;
  6.                 int z = 0;
  7.                 switch(x-y)
  8.                 {
  9.                 case -2 :
  10.                         z = -2;
  11.                 case -1 :
  12.                         z = -1;
  13.                 case 0 :
  14.                         System.out.println("输入的两个数相等");
  15.                 case 1 :
  16.                         z= 1;
  17.                 case 2 :
  18.                         z = 2;
  19.                 case 3 :
  20.                         z = 3;               
  21.                 }
  22.                 System.out.println(x+"比"+y+"大"+z);
  23.         }
  24. }
复制代码
  1. 12比10大3
复制代码

不是应该是2吗?


太不细心

LEQ1M_BH{{L90U9[TDZQ@CK.jpg (35.15 KB, 下载次数: 19)

LEQ1M_BH{{L90U9[TDZQ@CK.jpg

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 都是月亮惹的祸~~~

查看全部评分

12 个回复

倒序浏览
不好意思,忘了一个break,不过好像不影响
回复 使用道具 举报
就是少了break啊
回复 使用道具 举报

有了结果还是一样
回复 使用道具 举报
  1. class Testt
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 12 , y = 10 ;
  6.                 int z = 0;
  7.                 switch(x-y)
  8.                 {
  9.                 case -2 :
  10.                         z = -2;
  11.                 case -1 :
  12.                         z = -1;
  13.                 case 0 :
  14.                         System.out.println("输入的两个数相等");
  15.                 case 1 :
  16.                         z= 1;
  17.                 case 2 :
  18.                         z = 2;
  19.                         break;
  20.                 case 3 :
  21.                         z = 3;               
  22.                 }
  23.                 System.out.println(x+"比"+y+"大"+z);
  24.         }
  25. }
复制代码


拿回来随便加个也对了啊
难道你的机器问题?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
少了break,break是跳出的命令,也就是说你语句中如果没有 break,将会一直运行到括号结束才会停止。X-Y=2,case 2执行,z赋值是2,但是这时候程序没有找到break,所以继续执行下一个,而不会去判断case是否正确,也就是说下一个Z = 3的语句也执行了,z再次被赋值为3,因此之后打印的z会是3.恩,就是这样,用switch的时候记得一定要加上break

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
徐毅 高级黑马 2013-12-26 00:33:27
7#
class Switch
{
        public static void main(String[] args)
        {
                int x = 12 , y = 10 ;
                int z = 0;
                switch(x-y)
                {
                case -2 :
                        z = -2;
                                break;
                case -1 :
                        z = -1;
                                break;
                case 0 :
                        System.out.println("输入的两个数相等");
                                break;
                case 1 :
                        z= 1;
                                break;
                case 2 :
                        z = 2;
                                break;
                case 3 :
                        z = 3;  
                                break;
                }
                System.out.println(x+"比"+y+"大"+z);
        }
}

QQ截图20131226003256.png (1.52 KB, 下载次数: 28)

运行结果

运行结果
回复 使用道具 举报
徐毅 发表于 2013-12-26 00:33
class Switch
{
        public static void main(String[] args)

好吧,我确实疏忽了
回复 使用道具 举报
徐毅 高级黑马 2013-12-26 00:59:59
9#
这种比大小并且输出的用switch如果数值太大会很蛋疼,用if会好一点。我本来给你写了个if实现的,电脑断网了,如果你感兴趣的话我再传给你吧,一起加油哈,我也是新手,在学习毕老师的视频
回复 使用道具 举报
本帖最后由 天天学习 于 2013-12-26 10:05 编辑

1,switch语句的一个特点,结束switch语句的条件:
1.1,遇到break
1.2,程序执行到switch语句末尾即 “}”处

2,因此,由于x-y = 2,因此程序发现case 2处满足条件,所以程序从case 2处开始执行,由于case 2语句没有break,因此程序将不会在进行判读条件,顺序向下执行下面的代码,因而z被赋值为3,最后运行System.out.println(x+"比"+y+"大"+z),打印12比10大3,此时达到switch语句末尾,结束语句。
3,修改程序
  1. case 2 :
  2.               z = 2;
  3.               break;
复制代码


即可得到正确结果

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
徐毅 发表于 2013-12-26 00:59
这种比大小并且输出的用switch如果数值太大会很蛋疼,用if会好一点。我本来给你写了个if实现的,电脑断网了 ...

我也知道if更好,但是这不是在写笔记嘛
回复 使用道具 举报
天天学习 发表于 2013-12-26 10:04
1,switch语句的一个特点,结束switch语句的条件:
1.1,遇到break
1.2,程序执行到switch语句末尾即 “}” ...

谢谢了。
回复 使用道具 举报
没有default语句,编译应该会出错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马