鱼C论坛

 找回密码
 立即注册
查看: 10525|回复: 22

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

[复制链接]
发表于 2017-1-16 17:01:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 零度非安全 于 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  型或枚举类型常量,而且互不相同

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

switchUse.gif

例子代码如下:

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 和 秋季对应的内容?后面回复答对给鱼币

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

compile error.gif



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



评分

参与人数 1荣誉 +5 收起 理由
alltolove + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-16 17:59:02 | 显示全部楼层
好一个试试,又不会怀孕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-16 18:59:01 | 显示全部楼层
不二如是 发表于 2017-1-16 17:59
好一个试试,又不会怀孕

稳不会的,老司机的车永远都不会翻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-17 10:16:57 | 显示全部楼层
long是浮点型的?年代太久远了记不清了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-17 10:23:00 | 显示全部楼层
~风介~ 发表于 2017-1-17 10:16
long是浮点型的?年代太久远了记不清了~

Java 中的 long 是长整型的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-20 14:32:50 | 显示全部楼层
打印两遍,是因为漏了break吧。

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 奖励

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-20 14:34:10 | 显示全部楼层
小小七 发表于 2017-1-20 14:32
打印两遍,是因为漏了break吧。

是的,没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-23 13:31:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-1-23 13:40:49 | 显示全部楼层

你好活跃呀,哇,我就喜欢活跃的人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

匿名鱼油
匿名鱼油  发表于 2017-2-23 08:30:35
case 'a' 和 case '春' 的语句后没有break
回复 支持 反对

使用道具 举报

发表于 2017-3-20 13:37:17 | 显示全部楼层
输出两次的原因是在执行的case中没有break,会继续执行直到break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-20 13:42:26 | 显示全部楼层
不能用long类型数据,是因为当它转为int类型时,会有精度丢失。case语句执行时默认将数据都转为int

评分

参与人数 1鱼币 +6 收起 理由
零度非安全 + 6 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-30 09:51:26 | 显示全部楼层
因为没有加break,就自动跳到下一个分支继续执行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-24 14:10:59 | 显示全部楼层
因为在case语句中没有加break,然后直接跳转到下个语句执行了,下个语句有break,跳出判断语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-15 21:11:59 | 显示全部楼层
谢谢讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-3 15:53:50 | 显示全部楼层
学java的时候看了一遍  现在实习了再看一遍 为啥评论这么少呢 赞一个  感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 23:16:15 | 显示全部楼层
因为case'a'和case'春季'都没有break,所以会继续执行下一个case语句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-24 23:41:49 | 显示全部楼层
因为a的ASCII是97,case:‘a’那一项没有break,而且long的数据占得太大,转换成int,会丢失精度,java的switch不支持long
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 07:16:44 | 显示全部楼层
因為case 'a' 和 case '春' 後面沒有break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-10 20:11:44 | 显示全部楼层
两个long相加会自动转为int型,发生精度缺失。
字符a的ASCII值是97.
case所在行没有break不会跳出switch循环,自动执行到下一行遇到break跳出循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表