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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马19我最牛 中级黑马   /  2013-3-19 21:13  /  1817 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 许兵兵 于 2013-3-20 01:24 编辑
  1. class  SwitchDome
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                 int i =71;
  7.                 switch (i)
  8.                 {
  9.                 default:
  10.                         System.out.println("非法输入!");
  11.                         
  12.                 case 1 :
  13.                         System.out.println("今天是星期一!");
  14.                         break;
  15.                 case 2 :
  16.                         System.out.println("今天是星期二!");
  17.                         break;
  18.                 case 3 :
  19.                         System.out.println("今天是星期三!");
  20.                         break;
  21.                 case 4 :
  22.                         System.out.println("今天是星期四!");
  23.                         break;
  24.                 case 5 :
  25.                         System.out.println("今天是星期五!");
  26.                         break;
  27.                 case 6 :
  28.                         System.out.println("今天是星期六!");
  29.                         break;
  30.                 case 7 :
  31.                         System.out.println("今天是星期天!");
  32.                         
  33.                
  34.                 }

  35.         }
  36. }
复制代码
switch 语句,的顺序,是先从case里面进行匹配,然后没有找到匹配的,会输出,default,
我的理解就是说default就是最后才可能会执行,执行完default应该是结束了才对啊,
switch语句结束的是遇到break或者到结束,那为什么我这个,输出会是这个啊?

未命名.jpg (9.01 KB, 下载次数: 25)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 丁一 于 2013-3-19 21:28 编辑

整差了,删除,免得误导别人
回复 使用道具 举报
  •    int i =71;
  •                 switch (i)
  •                 {
  •                 default:
  •                         System.out.println("非法输入!");
  •                 case 1 :
  •                         System.out.println("今天是星期一!");
  •                         break
  • 第一种情况:当程序遇到break的是程序就会终止
  • 第二种情况:当程序执行到switch语句的末尾就会终止
     因为i = 71..  没有符合的. 所以程序 打印非法输入. 然后程序往下运行.打印 今天是星期一. 遇到break.  程序结束.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你的break.没写完 仔细看看,defualt后面没有break;
回复 使用道具 举报
再见亦是泪 发表于 2013-3-19 21:26
你的break.没写完 仔细看看,defualt后面没有break;

那个是少个break,但是,default 不是最后一句吗?我总感觉那句最后一句也要break,我的疑问就在这里.弄的我很晕乎.也就是说,我想问case 和default是哪个前哪个后?
回复 使用道具 举报
本帖最后由 田磊阳 于 2013-3-19 21:43 编辑

switch语句的特点:
1:case与default没有顺序,先执行第一个case,没有匹配的case再去执行default。
2:结束switch语句的两种情况,一个是遇到break,另一个是执行到switch结束。
3:如果匹配的case或者default没有对应的break,那么程序会继续执行下去,运行一切可以执行的代码,知道遇到break或者到switch结束。
class  SwitchDome

{

        public static void main(String[] args)
        {

               
                int i =71;     

                switch (i)

                {

                default:

                        System.out.println("非法输入!");

                        
                case 1 :
                        System.out.println("今天是星期一!");

                        break;

                case 2 :
                        System.out.println("今天是星期二!");

                        break;

                case 3 :
                        System.out.println("今天是星期三!");

                        break;

                case 4 :

                        System.out.println("今天是星期四!");

                        break;

                case 5 :

                        System.out.println("今天是星期五!");

                        break;

                case 6 :

                        System.out.println("今天是星期六!");

                        break;

                case 7 :
                        System.out.println("今天是星期天!");

                        
               
                }

        }

}
首先你定义的i=71没有对应的case,程序会从case1到case7运行一遍,发现没有,所以就执行default,输出“非法输入”,然后程序向下执行,运行一切可以执行的代码,  System.out.println("今天是星期一!");可以执行,就输出了“今天是星期一!”,再往下执行的时候,发现有break,就结束程序了

如果你的程序是这样的

class  SwitchDome

{

        public static void main(String[] args)
        {

               
                int i =71;

                switch (i)

                {

                default:

                        System.out.println("非法输入!");

                        
                case 1 :
                        System.out.println("今天是星期一!");

                       

                case 2 :
                        System.out.println("今天是星期二!");

                        

                case 3 :
                        System.out.println("今天是星期三!");

                    

                case 4 :

                        System.out.println("今天是星期四!");

                     

                case 5 :

                        System.out.println("今天是星期五!");


                case 6 :

                        System.out.println("今天是星期六!");

                     

                case 7 :
                        System.out.println("今天是星期天!");

                        
               
                }

        }

}

case后面都没有break,就会输出:
今天是星期一!
今天是星期二!
今天是星期三!
今天是星期四!
今天是星期五!
今天是星期六!
今天是星期天!
   

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
swich语句中,首先根据你的参数去匹配下面的case值,如果没有匹配的 就走到了,打印了"非法输入!"。
但是你的default语句中并没有定义break跳出循环语句,程序就会沿着代码继续往下走,知道遇到第一个break为止。
而下一个break前有System.out.println("今天是星期一!"); 所以就打印了今天是星期一!
假如case:2和case:3语句里都没有break跳出语句的话 还会跟着继续打印 今天是星期二,星期三。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张亚青 于 2013-3-20 09:34 编辑

switch:
一、switch()只接受byte、short、int、char四种。 (注:1.7开始接收String类型)
二、找到匹配的case并执行之后的代码,直到遇到break或者到switch代码块结尾;如果没有匹配的case则执行default;
二、case和default无顺序。只有遇到break;或者到'}'才会结束。default后如果不是'}'也不会结束。        

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
康嘉 中级黑马 2013-3-20 07:56:33
9#
张亚青 发表于 2013-3-19 21:49
switch:
一、switch()只接受byte、short、int、char四种。
二、找到匹配的case并执行之后的代码,直到遇到 ...

1.7开始接收String类型
回复 使用道具 举报
康嘉 发表于 2013-3-20 07:56
1.7开始接收String类型

好的,我修改一下,谢谢提醒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马