黑马程序员技术交流社区
标题: 关于switch语句中case取值的问题 [打印本页]
作者: 周泰良 时间: 2013-5-11 11:17
标题: 关于switch语句中case取值的问题
本帖最后由 周泰良 于 2013-5-13 23:38 编辑
在看毕老师的视频,在看到switch语句是有点疑问,请教各位大侠,谢谢。
需求:根据用户指定的月份输出对应的季节
我的代码如下:
// 需求:根据用户指定月份,打印该月份所属的季节
// 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12,1,2 冬季
class panduan
{
public static void main(String[] args)
{
int number = 4;
switch (number)
{
case 3||4||5:
System.out.println(number+"是春季");
break;
case 6||7||8:
System.out.println(number+"是夏季");
break;
case 9||10||11:
System.out.println(number+"是秋季");
break;
case 12||1||2:
System.out.println(number+"是冬季");
break;
default:
System.out.println("这不是一个月份,请重新输入");
break;
}
}
}
老师的代码
// 需求:根据用户指定月份,打印该月份所属的季节
// 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12,1,2 冬季
class panduan2
{
public static void main(String[] args)
{
int number = 13;
switch (number)
{
case 3:
case 4:
case 5:
System.out.println(number+"是春季");
break;
case 6:
case 7 :
case 8:
System.out.println(number+"是夏季");
break;
case 9:
case 10:
case 11:
System.out.println(number+"是秋季");
break;
case 12:
case 1:
case 2:
System.out.println(number+"是冬季");
break;
default:
System.out.println("这不是一个月份,请重新输入");
break;
}
}
}
我向请问下,我那种方式为什么不行呢,谢谢!
作者: 淡蓝色 时间: 2013-5-11 11:34
你可以使用
case 1,case 2,case 3
//代码段1
case 4,case 5,case 6
//代码段2
试试
我以前曾经使用过的,这是语法规定
作者: Jacky_Chen1990 时间: 2013-5-11 11:34
你要知道switch case的格式。
在case后面加的是常量表达式。
而3||4||5不是常量表达式
不过想法很奇特{:soso_e179:}
作者: 王浩骅 时间: 2013-5-11 11:35
本帖最后由 王浩骅 于 2013-5-11 11:38 编辑
我的理解是这样的,&& ||这是逻辑运算符,他们是boolean他们所得的结果是boolean类型的true或false,而不是你想象中的那种3或者4或者5的感觉。case后面要跟着常量表达式,所以不行。而且好像在||两边也不能是int类型数据。
作者: yedong07a 时间: 2013-5-11 11:35
本帖最后由 yedong07a 于 2013-5-11 11:41 编辑
有想法,这样的判断方式,也有可能实现,只是需要你多接触类型的问题,往深里研究,
switch中没有break;的部分顺序执行,有则作用是中断退出,
传入的number值与case的值对比,这个值一般有确定的数值、常量。
作者: 邵彩华 时间: 2013-5-11 11:39
case 穿透问题:switch 循环只在遇到两种情况结束:break , } 。如果如果执行了一个case语句或default之后 未到结尾的大括号,也没有遇到break,则会继续执行下面的语句,但不会判断case和default条件了,直到遇到break或右大括号,才会跳出循环。 循环中语句部分顺序,default语句可以放在任意处,但是先判断case语句。
判断类型:switch 语句,只能判断byte/short/int/char类型,对于区间和boolean 类型无法判断,解决办法,可以先用数值代替区间或boolean 值。实际开发中,几种判断语句,根据情况选择最适合的。另外,5.0以后 可以判断枚举类型,7.0判断字符串。
一般判断的输值不多,属于byte/short/int/char类型用switch,区间或boolean类型用if 语句。
作者: hou604720966 时间: 2013-5-11 11:39
你这个是不对的,switch语句的判断条件可以接受int,byte,char,short,枚举,不能接受其他类型.
作者: 克零岚 时间: 2013-5-11 11:40
||这是java中的逻辑运算符,或操作符。
我首先明确:switch语句中只能接受byte、short、char、int基本类型的值以及他们各自的包装类,还有枚举类型。
你上面写的 3||4||5 它们的返回类型是boolen类型,switch不支持这种类型,所以会报错。
You Ok!!!
作者: 吴浩 时间: 2013-5-11 12:30
克零岚 发表于 2013-5-11 11:40 
||这是java中的逻辑运算符,或操作符。
我首先明确:switch语句中只能接受byte、short、char、int基本类型 ...
case后面只能跟byte,char,short,int基本类型,而你那个已经跟逻辑运算符
作者: 黑马-雷钊 时间: 2013-5-11 14:58
case和if语句不一样。case后面只能跟一个具体的值。而if的括号里面可以跟判断语句。。在确定具体的“值”得情况下用swicth好点。。不确定具体的数值就用if。。
作者: 杨兴庭 时间: 2013-5-11 16:02
是语法的问题:case后面加的是常量,而楼主case后面加 3||4||5 则是条件表达式了,这样解释应该很好理解吧
switch语句用法
switch (表达式)
{
case 常量 1:
语句;
break;
case 常量 2:
语句;
break;
default:
语句;
}
注:“switch(表达式)”中的“表达式”通常可以理解成“变量”,变量必须是单个字符(单个字母)或者数字;所以在switch内的“case常量 :”中的“常量只能是字母或者数字”,所以switch与if相比判断条件存在局限性,switch语句都可以转换成if语句来写,但是if语句不是都可以转换成switch语句,就是因为switch语句中“表达式”的局限性。
作者: 李瑞 时间: 2013-5-11 20:36
||表达式是连接两个布尔型返回的是布尔型
作者: 刘茂林 时间: 2013-5-11 21:15
- class panduan
- {
- public static void main(String[] args)
- {
- int number = 4;
- switch (number)
- {
- case 3:case 4:case 5:
- System.out.println(number+"是春季");
- break;
- case 6:case 7:case 8:
- System.out.println(number+"是夏季");
- break;
- case 9:case 10:case 11:
- System.out.println(number+"是秋季");
- break;
- case 12:case 1:case 2:
- System.out.println(number+"是冬季");
- break;
- default:
- System.out.println("这不是一个月份,请重新输入");
- break;
- }
- }
- }
复制代码 java就这么规定的 你没办法 。。呵呵 。。有想法啊。。
有着个想法是好的 。但是要遵循java的语法规定
作者: 杨修 时间: 2013-5-11 22:10
switch语句后面中case后承接的是常量表达式,||这种都是属于逻辑运算符,逻辑运算符返回的值不是常量表达式么,
算术运算符和逻辑运算符有本质的区别啊。你这样一来,case后面的表达式等于已经和java中的语法规则想矛盾了。
你可以把选择项连接起来case 3:case 4:case 5:,这样也可以简化书写,达到简化目的么。。
作者: 仲伟 时间: 2013-5-11 22:35
你可以用 |或者&,试试,运算的字符
作者: 周泰良 时间: 2013-5-12 14:27
王浩骅 发表于 2013-5-11 11:35 
我的理解是这样的,&& ||这是逻辑运算符,他们是boolean他们所得的结果是boolean类型的true或false,而不是 ...
嗯,我理解了,3||4||5得到的结果是true,然后和任何一个月分都不匹配,因为季节是整形的。谢谢!
||两边不能是整形数据吗?不会吧,感觉语法是行得通呀。
作者: 周泰良 时间: 2013-5-12 14:32
邵彩华 发表于 2013-5-11 11:39 
case 穿透问题:switch 循环只在遇到两种情况结束:break , } 。如果如果执行了一个case语句或default之后 ...
谢谢,回答的很详细,希望后续我们能QQ多多交流。
作者: Sword 时间: 2013-5-12 18:50
如果问题未解决,请继续追问,如果问题解决了,请点击你的帖子下面的"编辑"重新编辑帖子,将分类改为“已解决”,谢谢合作!
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |