一个java中switch的问题

今天我在写程序的时候用了switch语句,发现了一个奇怪的问题,怎么想也想不通,希望各为高手给予指导,谢谢,下面我用一个最简单的例子来描述我发现的问题:在同一个包中有两个... 今天我在写程序的时候用了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型后,程序又能顺利的通过编译了,这是怎么回事儿?
展开
 我来答
岑行柏3204
2009-01-19 · TA获得超过2435个赞
知道大有可为答主
回答量:1549
采纳率:0%
帮助的人:1330万
展开全部

//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

叔梅胥俏
2019-05-15 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:27%
帮助的人:1000万
展开全部
switch...case语句中的分支条件必须要是常量表达式,也就是1,2,3。。。"1",
"2",
"3"等这些之类的,也就是值要是已知的,你的这个错误修改方式除了上面提到的修改case的内容外,还可以修改第一句定义:
final
int
up=0,dawn=1,left=2,right=3;
int
direction=0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
诗玉兰云裳
2019-06-01 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:2094万
展开全部
在java中
switch语句的表达式或常量只能是以下类型:
byte,short,char,int
而你的表达式变量c的类型为string
所以有错
解决方法:
改正成以上所说任何一种即可.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
储利玉2i
2009-01-19 · TA获得超过1157个赞
知道小有建树答主
回答量:954
采纳率:0%
帮助的人:485万
展开全部
aaronswon 说得不够准确,
case语句的判断条件应该是int,byte,char,short,不能接受其他类型.
也就是说你这里传的case Constant.a: ,这个Constant.a的值必需是 int,byte,char,short这四种数据类型之一,不能为其它(你这里是为Integer对象了)。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xghzlg
2009-01-19 · TA获得超过106个赞
知道答主
回答量:165
采纳率:0%
帮助的人:106万
展开全部
你没有明白int和Integer有意思,int是类型是常量类型也就是整型常量,而Integer是一个类,是对象类型,也就是说你定义了一个Integer对象的引用类型a,b。明白我的意思吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式