黑马程序员技术交流社区

标题: 关于switch的问题 [打印本页]

作者: 我手心里的宝    时间: 2013-3-20 13:25
标题: 关于switch的问题
本帖最后由 我手心里的宝 于 2013-3-20 13:54 编辑

在switch 中
swich(num)
    case 1: System.out.println("你好");break;
这个break 可以省略吗 可不可以不写这个break
里面的类型如果是枚举的话,为什么写上break 会报错呢
作者: 田磊阳    时间: 2013-3-20 13:31
switch用于byte  short   int   char  类型

break不可以省略,如果没有break的话,程序会继续往下执行的
作者: 黑马-李嘉欣    时间: 2013-3-20 13:32
1.这个break是不可以省略的,当然如果你只有1个case的话就无所谓了,省略break后会使语句一直往后执行,最后一句,其余的break一般不能省略。

2.注意:1.swith(x)中只接收byte,short,int,char型(这是你的第二个问题答案)
            2. 无论{}中default在何种位置都是最后执行的
            3.结束switch语句的两种情况:遇到break,执行switch语句结束。
            4.如果匹配的case或者default没有相对应的break,那么程序会继续执行,运行可以执行的语句,直到遇到break或者switch结尾结束
            If和switch语句使用场景:
            如果判断的具体数值不多,而是符合byte short int char这四种类型,建议用switch语句。Switch语句效率稍高。
            其他情况:对区间判断,对结果为boolean类型判断,使用if,if使用范围更广。
希望对你有帮助~


作者: 小路飞    时间: 2013-3-20 13:33
break的作用是退出循环,若没有break会继续向下执行。break可有可无,根据你的需求而定。
作者: 续圆凯    时间: 2013-3-20 13:35
本帖最后由 续圆凯 于 2013-3-20 13:40 编辑

此程序中的break不能省略。如果省略了,程序会继续向下执行。

switch语句中break的作用:
break 使得程序在执行完选中的分支后,可以跳出整个switch语句(即跳到switch接的一对{}之后),完成switch。如果没有这个break,程序将在继续前进到下一分支,直到遇到后面的break或者switch完成。

switch语句中,变量的类型只能是整型和字符类型。它们包含 int,char。另外枚举类型内部也是由整形或字符类型实现,所以也可以作为switch语句的变量。
作者: Just_Only    时间: 2013-3-20 13:35
switch中case 后面可以不用break,你可以试试下面的代码,如果有个break,没有写你改变x值你看看打印的结果,比如,x=4,我把春季的后面break去掉,结果确是春季和夏季,度打印的,那就是不符合规律的了,所以当你需要的时候,你可以使用break,而不需要的时候,是可以不加的。
class  SwitchTest
{
public static void main(String[] args)
{
   int x = 4;
  switch(x)
  {
   case 3:
   case 4:
   case 5:
    System.out.println(x+"春季");
    break;
   
   case 6:
   case 7:
   case 8:
    System.out.println(x+"夏季");
    break;
   case 9:
   case 10:
   case 11:
    System.out.println(x+"秋季");
    break;
   case 12:
   case 1:
   case 2:
    System.out.println(x+"冬季");
    break;
   default:
    System.out.println("nono");
  }
  /*
switch中可以用的类型byte short int char这四种类型。  
  */
}
}

作者: 我手心里的宝    时间: 2013-3-20 13:39
  1. public enum CustomerType {
  2.         COMMON,EXPRESS,VIP;
  3.         public String toString(){
  4.                 switch(this){
  5.                 case COMMON: return "普通";
  6.                 case EXPRESS: return "快速";
  7.                 case VIP: return name();
  8.                 }
  9.                 return null;
  10.         }
  11. }
复制代码
但是在枚举中 加入break 就会报错
作者: Just_Only    时间: 2013-3-20 13:42
我手心里的宝 发表于 2013-3-20 13:39
但是在枚举中 加入break 就会报错

使用的类型 byte short  char int
作者: 刘辉    时间: 2013-3-20 13:45
switch语句的标准格式
switch(表达式)
{
   case 常量:
   执行的代码;
   break;
case 常量:
   执行的代码
   break;
default:
   执行的代码;
   break;
}
注意事项:
switch(表达式)必须和case 后面的常量的数据类型一致
switch(表达式)接收,byte short int char
     JDK 6 :byte short int char
     JDK 7 :byte short int char String
  switch 和 if 区别:
  if 和 switch 他们接收的数据类型不一样, if 对于范围的判断比较好用, switch 最好是用于简单的数据判断,if最狠的功能,判断引用数据类型。
break在这里是不能去掉的,去掉的话程序会继续往下执行的。
作者: 我手心里的宝    时间: 2013-3-20 13:50
枚举的新特性是可以的 可以加入枚举类型
  1. public enum CustomerType {
  2.         COMMON,EXPRESS,VIP;
  3.         public String toString(){
  4.                 switch(this){
  5.                 case COMMON: return "普通";
  6.                 case EXPRESS: return "快速";
  7.                 case VIP: return name();
  8.                 }
  9.                 return null;
  10.         }
  11. }
复制代码
而且可以在内部用自己的对象

作者: 我手心里的宝    时间: 2013-3-20 13:54
记住就好了,对于枚举类型内部不可以加break
作者: android2050    时间: 2013-3-20 14:38
不能省略,省略的话如果有多条case语句,程序遇到满足条件后后面的case语句还会执行,直到遇到break。
报错跟break没有关系,可能是你程序写错了。
  1. enum Num {
  2.         男,女;
  3.         }
  4. public class TestDemo {
  5.         public static void print(Num n) {
  6.                 switch(n) {
  7.                 case 男:
  8.                         System.out.println("是男的");
  9.                         break;
  10.                 case 女:
  11.                         System.out.println("是女的");
  12.                         break;
  13.                 default :
  14.                         break;
  15.                 }
  16.         }
  17.         public static void main(String[] args) {
  18.                 Num n[] = Num.values();
  19.                 for(int i = 0; i < n.length ; i ++) {
  20.                         print(n[i]);
  21.                 }
  22.                
  23.         }
  24. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2