一个java中switch的问题
在同一个包中有两个class
public class Constant {
public static final Integer a = 0;
public static final Integer b = 1;
}
public class TestSwtich {
public static void main(String[] args) {
int x = 0;
switch (x) {
case Constant.a:
System.out.println(0);
break;
case Constant.b:
System.out.println(1);
break;
}
}
}
TestSwtich不能通过编译,说case表达式一定要常量,可是我已经在Constant类中声明了常量了呀?还有一个更奇怪的问题,当我把Constant类中的a和b从Integer类型改为int型后,程序又能顺利的通过编译了,这是怎么回事儿? 展开
//switch 的条件改用 enmu 类型,LINUX+JDK-1.6.11下测试
//: EnumTest.java
public class EnumTest {
public static void main(String[] args) {
double a = 5;
double b = 4;
//随机产生10次TYPE,并计算结果
for(int i=0; i<10; i++){
int typeId = (int)(Math.random()*TYPE.values().length);
TYPE type = TYPE.values()[typeId];
calc(a,b,type);
}
}
public static void calc(double a,double b,TYPE type){
double result = 0;
switch(type){//switch 的条件改用 enmu 类型
case 加:result = TYPE.加.calc(a, b);break;
case 减:result = TYPE.减.calc(a, b);break;
case 乘:result = TYPE.乘.calc(a, b);break;
case 除:result = TYPE.除.calc(a, b);break;
}
System.out.println(a+type.name()+b+"="+result);
}
//enum 类型
public enum TYPE{
加{public double calc(double a,double b){return a+b;}},
减{public double calc(double a,double b){return a-b;}},
乘{public double calc(double a,double b){return a*b;}},
除{public double calc(double a,double b){return a/b;}};
public abstract double calc(double a,double b);
}
}
---------随机结果---------
5.0加4.0=9.0
5.0除4.0=1.25
5.0减4.0=1.0
5.0加4.0=9.0
5.0减4.0=1.0
5.0加4.0=9.0
5.0乘4.0=20.0
5.0加4.0=9.0
5.0乘4.0=20.0
5.0加4.0=9.0
"2",
"3"等这些之类的,也就是值要是已知的,你的这个错误修改方式除了上面提到的修改case的内容外,还可以修改第一句定义:
final
int
up=0,dawn=1,left=2,right=3;
int
direction=0;
switch语句的表达式或常量只能是以下类型:
byte,short,char,int
而你的表达式变量c的类型为string
所以有错
解决方法:
改正成以上所说任何一种即可.
case语句的判断条件应该是int,byte,char,short,不能接受其他类型.
也就是说你这里传的case Constant.a: ,这个Constant.a的值必需是 int,byte,char,short这四种数据类型之一,不能为其它(你这里是为Integer对象了)。