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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM周一帆 中级黑马   /  2013-3-27 21:03  /  1851 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM周一帆 于 2013-3-28 19:59 编辑

switch (4) {
                case 2:
                        System.out.println("a");
                        break;
                case 3:
                        System.out.println("b");
                        break;
                default:
                        System.out.println("d");
                        break;
                case 4:
                        System.out.println("c");
答案是c为什么不执行default  如果把default放到最后 结果是cd  求解

评分

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

查看全部评分

8 个回复

倒序浏览
本帖最后由 曹玉龙 于 2013-3-27 21:16 编辑

你的代码少了点东西,case 4的时候没有加上break;,执行完这行,继续向下执行了所以多打出一个字符。
补全就正常了:
  1. class Demo {
  2.         public static void main(String[] args) {

  3.                 switch (4) {
  4.                 case 2:
  5.                         System.out.println("a");
  6.                         break;
  7.                 case 3:
  8.                         System.out.println("b");
  9.                         break;

  10.                 case 4:
  11.                         System.out.println("c");
  12.                         break;

  13.                 default:
  14.                         System.out.println("d");
  15.                         break;
  16.                 }
  17.         }
  18. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
switch (4) {
                case 2:
                        System.out.println("a");
                        break;
                case 3:
                        System.out.println("b");
                        break;
                default:
                        System.out.println("d");
                        break;
                case 4:
                        System.out.println("c");
switch-case机制是一进内存就把所有选项全部加载进程序, default的位置并不影响程序的执行结果
所以结果为c

switch (4) {
                case 2:
                        System.out.println("a");
                        break;
                case 3:
                        System.out.println("b");
                        break;
                case 4:
                        System.out.println("c");
                default:
                        System.out.println("d");
                        break;

而如果default在最后,又因为case 4 之后没有break语句跳出switch-case判断,所有会继续执行到
default语句,所以输出结果为cd

评分

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

查看全部评分

回复 使用道具 举报
本题 中,有参数不满足任何 case,则执行 default  语句中的代码,本题因为满足参数所以输出c,把default放到最后输出cd是因为break是中断控制流程的语句,如果没有break语句则不中断,代码将继续执行下去,所以是cd

评分

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

查看全部评分

回复 使用道具 举报
default  是swich语句中,所以选项都不满足的时候才会执行,

但是你不能把break弄掉了,不然会出现贯穿的现象,

直到遇到break或是大括号为止。

        switch (2) {
                case 2:
                        System.out.println("a");
                        break;
                case 3:
                        System.out.println("b");
                        break;
                default:
                        System.out.println("d");
                        break;
                case 4:
                        System.out.println("c");
                        break;//你一定是把这个break弄掉了吧。
                }
回复 使用道具 举报
输出c后 就不判断执行case下面的语句了  如果把 default 放在最后能执行,是因为你 case4 没有break,
switch 首先判断有没有满足条件的,如果有执行 case 内容,没有执行 default 内容;执行后就顺序向下执行直到遇见第一个break 或是} 结束 switch
回复 使用道具 举报
曹玉龙 发表于 2013-3-27 21:14
你的代码少了点东西,case 4的时候没有加上break;
补全就正常了:

你可能是理解错我的意思了  break  不加也行  不报错的 但是就没有用switch 的作用了
回复 使用道具 举报
switch 语句的格式:
 
switch ( 整型或字符型变量 )
{
     case 变量可能值1 :
         分支一;
         break;
   case 变量可能值2 :
         分支二;
         break;
   case 变量可能值3 :
         分支三;
         break;
   ...
   default :
       最后分支;

 
在 switch 的语法里,我们要学到4个关键字:switch、case 、break、default。

说一下关于switch中非常重要的几个注意点。
        第一、switch ( 整型或字符型变量 ) 中,变量的类型如文中所标,只能是整型和字符类型,实型(浮点型)数就不行
        第二、case 之后可以是直接的常量数值,如例中的1、2、3、4,也可以是一个使用常量计算式,如2+2等,但不能是变量或带有变量的表达式,如 a * 2等。当然也不能是实型数,如4.1,或2.0 / 2 等。
        第三、break 的作用,break 使得程序在执行完选中的分支后,可以跳出整个switch语句(即跳到switch接的一对{}之后),完成switch。如果没有这个break,程序将在继续前进到下一分支,直到遇到后面的break或者switch完成。
        第四、default是可选中,如果没有default,程序在找不到匹配的case分支后,将在switch语句范围内不做什么事,直接完成switch。

评分

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

查看全部评分

回复 使用道具 举报
胡军 中级黑马 2013-3-27 22:11:17
9#
switch语句中,无论default在什么位置,都是先判断case语句,如果case符合就去执行case中的语句,如果case都不符合,才去执行default语句。这个知识点毕老师在视频里讲过的。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马