零度非安全 发表于 2017-1-16 17:01:07

【Java 教程(原创)】013.开关语句详解(有思考题)

本帖最后由 零度非安全 于 2017-1-19 14:35 编辑

【Java 教程(原创)】索引帖

switch 语句是单条件多分支的开关语句,它的一般格式如下(其中,break 语句是可选的):
switch(表达式){
      case 常量值1:
                若干语句
                break;
      case 常量值2:
                若干语句
                break;
      .
      .
      .
      case 常量值n:
                若干语句
                break;
      default:
                若干语句
}
在 switch 语句中,“表达式”的值必须为 byte、short、int、char型或枚举类型;“常量值 1”到“常量值 n”也必须是 byte、short、int、char型或枚举类型常量,而且互不相同{:10_298:}。

学过其它编程的鱼油们,相信这个语句怎么执行的你们都知道,我也在这里不再重复了。我就简单举个栗子给你们演示下这个语句的用法,例子效果如下图所示:



例子代码如下:

switchUse.java
enum Season{
      春季,夏季,秋季,冬季
}

public class switchUse{
      public static void main(String args[]){
                int x = 96,y = 1;
                Season season = Season.春季;
                switch(x + y){
                        case 1:
                              System.out.println(x + y);
                              break;
                        case 'a':
                              System.out.println(x + y);
                        case 10:
                              System.out.println(x + y);
                              break;
                        default: System.out.println("没有般配的" + (x + y));
                }
                switch(season){
                        case 冬季:
                              System.out.println("寒冬腊月");
                        case 春季:
                              System.out.println("春天种下种子");
                        case 秋季:
                              System.out.println("秋天收获果实");
                              break;
                        case 夏季:
                              System.out.println("暑假真好,又可以打撸了");
                }
      }
}思考:想一想为什么会输出两个 97 和 秋季对应的内容?后面回复答对给鱼币{:10_340:}。

需要强调的是,switch 语句中表达式的值必须是 byte、short、int、char型 或 枚举类型 。如果将上例中的
int x = 96,y = 1;
更改为
long x = 96,y = 1;编译时将会出现错误。不信,你试试看。反正我试过了,试试又不会怀孕{:10_249:}。想一想这又是为什么呢?{:10_300:} 多动脑,勤动手!





【特别注意】帖子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。


点我前往上一讲

点我前往下一讲

不二如是 发表于 2017-1-16 17:59:02

好一个试试,又不会怀孕{:10_281:}

零度非安全 发表于 2017-1-16 18:59:01

不二如是 发表于 2017-1-16 17:59
好一个试试,又不会怀孕

稳不会的,老司机的车永远都不会翻{:10_332:}

~风介~ 发表于 2017-1-17 10:16:57

long是浮点型的?年代太久远了记不清了~{:10_256:}

零度非安全 发表于 2017-1-17 10:23:00

~风介~ 发表于 2017-1-17 10:16
long是浮点型的?年代太久远了记不清了~

Java 中的 long 是长整型的{:10_249:}

小小七 发表于 2017-1-20 14:32:50

{:9_228:}打印两遍,是因为漏了break吧。

零度非安全 发表于 2017-1-20 14:34:10

小小七 发表于 2017-1-20 14:32
打印两遍,是因为漏了break吧。

是的,没错{:10_256:}

464318257 发表于 2017-1-23 13:31:05

{:10_288:}

零度非安全 发表于 2017-1-23 13:40:49

464318257 发表于 2017-1-23 13:31


你好活跃呀,哇,我就喜欢活跃的人{:5_92:}

Anonymous 发表于 2017-2-23 08:30:35

case 'a' 和 case '春' 的语句后没有break

CarpLyy 发表于 2017-3-20 13:37:17

输出两次的原因是在执行的case中没有break,会继续执行直到break

CarpLyy 发表于 2017-3-20 13:42:26

不能用long类型数据,是因为当它转为int类型时,会有精度丢失。case语句执行时默认将数据都转为int

pyrui 发表于 2017-10-30 09:51:26

因为没有加break,就自动跳到下一个分支继续执行了。

王子会哭 发表于 2017-11-24 14:10:59

因为在case语句中没有加break,然后直接跳转到下个语句执行了,下个语句有break,跳出判断语句

suiyisuixin2017 发表于 2018-4-15 21:11:59

谢谢讲解

赵一锦啊 发表于 2018-7-3 15:53:50

学java的时候看了一遍现在实习了再看一遍 为啥评论这么少呢 赞一个感谢楼主

渴望飞翔的小鸡 发表于 2018-10-11 23:16:15

因为case'a'和case'春季'都没有break,所以会继续执行下一个case语句。

xxx999 发表于 2018-10-24 23:41:49

因为a的ASCII是97,case:‘a’那一项没有break,而且long的数据占得太大,转换成int,会丢失精度,java的switch不支持long

janecyyu 发表于 2019-5-25 07:16:44

因為case 'a' 和 case '春' 後面沒有break

半度小微凉 发表于 2019-11-10 20:11:44

两个long相加会自动转为int型,发生精度缺失。
字符a的ASCII值是97.
case所在行没有break不会跳出switch循环,自动执行到下一行遇到break跳出循环。
页: [1] 2
查看完整版本: 【Java 教程(原创)】013.开关语句详解(有思考题)