问答详情
源自:4-6 Java条件语句之 switch

我单独注释掉第一部分或者单独注释掉第二部分,结果都可以运行,但是我都不注释的时候,就不显示结果了,为什么?

public class HelloWorld {

    public static void main(String[] args) {

char today='日';

        switch(today){

            // case '一':

            // case '二':

            // case '三':

            //     System.out.println("吃包子");

            case '二':

            case '四':

            case '六':

                System.out.println("吃油条");

            case '日':

                System.out.println("吃主席套餐");

        }

/************************************************************************************************/

public class HelloWorld {

    public static void main(String[] args) {

char today='日';

        switch(today){

            case '一':

            case '二':

            case '三':

                System.out.println("吃包子");

            // case '二':

            // case '四':

            // case '六':

            //     System.out.println("吃油条");

            case '日':

                System.out.println("吃主席套餐");

        }

        

/**********************************************************************************************/


public class HelloWorld {

    public static void main(String[] args) {

char today='日';

        switch(today){

            case '一':

            case '二':

            case '三':

                System.out.println("吃包子");

            case '二':

            case '四':

            case '六':

                System.out.println("吃油条");

            case '日':

                System.out.println("吃主席套餐");

        }

        


提问者:晴空自由0 2016-04-23 21:52

个回答

  • zhuifengtu
    2016-04-24 10:30:47

    你这个代码问题应该是有不少的:

    1. 一个汉字不是一个字符,所以你用char today='日'应该好似有问题的。为什么不考虑用数字呢?int today='0'(西方国家一周的第一天是周日所以我用0表示第一天,这和计算机里的思维一致,比如数组的小表都是从0开始的)或者你也可以int today='7' 这都无所谓;

    2. switch()语句语法有问题。建议你用switch()语句之前先思考一下如果单纯嵌套if()语句,即 iif() elseif() .....else()该如何实现。因为switch()语句本身就是一个条件嵌套语句。这么一比较你就知道了,在每一行case: 语句1后面都应该加上break;不然这个case() 语句之行完了后仍然要继续执行下面所有的case()语句进行条件匹配(联想一下if()elseif()..else()语句是不是不会这样?)所以代码应该是:


      int today=0;

      switch(today)

      {case(1):

      case(3);

      case(5):System.out.println("今天吃包子");break;

      /*多行条件匹配要将多个case语句都罗列出来并且在做后一行写上条件满足执行的语句,最后,break 语句是不能少。*/

      case(2):

      case(4):

      case(6):System.out.println("今天吃油条");break;

      case(0):System.out.println("今天吃主席套餐");break;/*最后一行case语句可以不写break,因为条件匹配到最后一行,无路能否匹配程序都得跳出循环匹配了)*/

      /* 从上面一句说的逻辑里,你也看得出来有不合理的地方——如果所有条件(case())都没有匹配成功程序该怎么办呢?你没有告诉程序,所以这是不合理的。但是if()..elseif()..else()语句没有这个问题你想明白了吗?所以正确的switch()语句的语法是将最后一个匹配条件改成default:  ...  .

      这个例子的话就应该写成default():System.out.println("今天吃主席套餐");*/

    3. 最后一个小建议:计算机(编程语言)说到底是舶来品,外国人发明的。在计算机世界里,除了字符串,建议不要使用汉字,你用汉语拼音都比汉字要好——很容易出现编码问题。关于汉字编码和英文字母的编码问题,你也应该了解一下,这是不一样的——汉字那么复杂,哪像a,b,c,d这么简单用一个字节就能编码出来呢?。



  • adamlee
    2016-04-23 23:15:59

    case的值有重复

  • hujq1002
    2016-04-23 22:18:54

    因为"吃包子"应该是 一三五,你写成 一二三 了,这样会跟下面的二重复。另外,建议你每个case输出之后加break;

  • 慕粉3151141
    2016-04-23 22:14:14

                case '一':

                case '三':

                case '五':

                    System.out.println("吃包子");