关于switch语句的问题.

interhanchi 2005-07-08 11:52:12
public static Instrument next(){
private Random rand = new Random();
switch(rand.nextInt(5)){
case 0: return new Wind();
case 1: return new Percussion();
case 2: return new Stringed();
case 3: return new Brass();
    case 4: return new Woodwind();
}
}
其中instrument 是基类,其他类都是它的子类!
请问一下为什么编译会出错,它显示没有返回值!
这样就可以了,为什么?
public static Instrument next(){
private Random rand = new Random();
switch(rand.nextInt(5)){
default:
case 0: return new Wind();
case 1: return new Percussion();
case 2: return new Stringed();
case 3: return new Brass();
    case 4: return new Woodwind();
}
}
...全文
188 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
interhanchi 2005-07-08
  • 打赏
  • 举报
回复
55555谁能告诉我原因!
duanyasheng 2005-07-08
  • 打赏
  • 举报
回复
default:是放在前面?
还有为什么break也没有!?
maomaofly110 2005-07-08
  • 打赏
  • 举报
回复
default,确实是需要的,养成良好的编程习惯吧
interhanchi 2005-07-08
  • 打赏
  • 举报
回复
555555555什么意思?
我把switch里面的参数改成2也会出错!
apple21 2005-07-08
  • 打赏
  • 举报
回复
default
congliu 2005-07-08
  • 打赏
  • 举报
回复
有switch就最好有default,
而且是rand运算,编译器不会根据实际运算结果(0-5),而取消default的处理情况
interhanchi 2005-07-08
  • 打赏
  • 举报
回复
up
interhanchi 2005-07-08
  • 打赏
  • 举报
回复
up
rower203 2005-07-08
  • 打赏
  • 举报
回复
如果没写default:,则值为0、1、2、3、4以外的话无返回值;
照你写的那样加的default:,则值不为0、1、2、3、4时返回了new Wind();就不错了。
Dan1980 2005-07-08
  • 打赏
  • 举报
回复
你的代码能通过编译才怪呢. 方法体中允许定义private修饰的变量? 这是一个问题.

另一个原因不是一目了然吗?

在你的switch结构中, 编译器不可能确定一定有一个case分支会被执行, 也就不可能确定该函数一定会返回一个Instrument.

而第二段代码中, 因为一开始就是default:, 而你又没有加break;语句, 所以后面的所有代码都有机会被执行. 但是遇到第一个return的时候, 函数就返回了, 所以第二段代码永远都是返回new Wind().

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧