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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周泰良 中级黑马   /  2013-5-11 11:17  /  3290 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周泰良 于 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;               
                }
        }
}
我向请问下,我那种方式为什么不行呢,谢谢!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

18 个回复

倒序浏览
你可以使用
case 1,case 2,case 3
//代码段1
case 4,case 5,case 6
//代码段2
试试
我以前曾经使用过的,这是语法规定
回复 使用道具 举报
你要知道switch case的格式。
在case后面加的是常量表达式。
而3||4||5不是常量表达式

不过想法很奇特{:soso_e179:}
回复 使用道具 举报
本帖最后由 王浩骅 于 2013-5-11 11:38 编辑

我的理解是这样的,&& ||这是逻辑运算符,他们是boolean他们所得的结果是boolean类型的true或false,而不是你想象中的那种3或者4或者5的感觉。case后面要跟着常量表达式,所以不行。而且好像在||两边也不能是int类型数据。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1 理解不错。

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 yedong07a 于 2013-5-11 11:41 编辑

有想法,这样的判断方式,也有可能实现,只是需要你多接触类型的问题,往深里研究,
switch中没有break;的部分顺序执行,有则作用是中断退出,
传入的number值与case的值对比,这个值一般有确定的数值、常量。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
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 语句。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报 1 0
你这个是不对的,switch语句的判断条件可以接受int,byte,char,short,枚举,不能接受其他类型.
回复 使用道具 举报
||这是java中的逻辑运算符,或操作符。
我首先明确:switch语句中只能接受byte、short、char、int基本类型的值以及他们各自的包装类,还有枚举类型。
你上面写的    3||4||5  它们的返回类型是boolen类型,switch不支持这种类型,所以会报错。
You  Ok!!!
回复 使用道具 举报
吴浩 中级黑马 2013-5-11 12:30:25
9#
克零岚 发表于 2013-5-11 11:40
||这是java中的逻辑运算符,或操作符。
我首先明确:switch语句中只能接受byte、short、char、int基本类型 ...

case后面只能跟byte,char,short,int基本类型,而你那个已经跟逻辑运算符
回复 使用道具 举报
case和if语句不一样。case后面只能跟一个具体的值。而if的括号里面可以跟判断语句。。在确定具体的“值”得情况下用swicth好点。。不确定具体的数值就用if。。
回复 使用道具 举报
是语法的问题:case后面加的是常量,而楼主case后面加  3||4||5 则是条件表达式了,这样解释应该很好理解吧

switch语句用法
switch (表达式)
{
      case 常量 1:
                语句;
                break;
      case 常量 2:
                语句;
                break;

        default:
                语句;
}

注:“switch(表达式)”中的“表达式”通常可以理解成“变量”,变量必须是单个字符(单个字母)或者数字;所以在switch内的“case常量 :”中的“常量只能是字母或者数字”,所以switchif相比判断条件存在局限性,switch语句都可以转换成if语句来写,但是if语句不是都可以转换成switch语句,就是因为switch语句中“表达式”的局限性。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
||表达式是连接两个布尔型返回的是布尔型
回复 使用道具 举报
  1. class panduan
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int number = 4;
  6.                 switch (number)
  7.                 {
  8.                 case 3:case 4:case 5:
  9.                         System.out.println(number+"是春季");
  10.                         break;
  11.                 case 6:case 7:case 8:
  12.                         System.out.println(number+"是夏季");
  13.                         break;
  14.                 case 9:case 10:case 11:
  15.                         System.out.println(number+"是秋季");
  16.                         break;
  17.                 case 12:case 1:case 2:
  18.                         System.out.println(number+"是冬季");
  19.                         break;
  20.                 default:
  21.                         System.out.println("这不是一个月份,请重新输入");
  22.                         break;               
  23.                 }
  24.         }
  25. }
复制代码
java就这么规定的  你没办法 。。呵呵 。。有想法啊。。
有着个想法是好的 。但是要遵循java的语法规定  
回复 使用道具 举报
switch语句后面中case后承接的是常量表达式,||这种都是属于逻辑运算符,逻辑运算符返回的值不是常量表达式么,
算术运算符和逻辑运算符有本质的区别啊。你这样一来,case后面的表达式等于已经和java中的语法规则想矛盾了。
你可以把选择项连接起来case 3:case 4:case 5:,这样也可以简化书写,达到简化目的么。。

回复 使用道具 举报
你可以用 |或者&,试试,运算的字符
回复 使用道具 举报
王浩骅 发表于 2013-5-11 11:35
我的理解是这样的,&& ||这是逻辑运算符,他们是boolean他们所得的结果是boolean类型的true或false,而不是 ...

嗯,我理解了,3||4||5得到的结果是true,然后和任何一个月分都不匹配,因为季节是整形的。谢谢!
||两边不能是整形数据吗?不会吧,感觉语法是行得通呀。
回复 使用道具 举报
邵彩华 发表于 2013-5-11 11:39
case 穿透问题:switch 循环只在遇到两种情况结束:break , } 。如果如果执行了一个case语句或default之后  ...

谢谢,回答的很详细,希望后续我们能QQ多多交流。
回复 使用道具 举报
Sword 金牌黑马 2013-5-12 18:50:38
18#
如果问题未解决,请继续追问,如果问题解决了,请点击你的帖子下面的"编辑"重新编辑帖子,将分类改为“已解决”,谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马