这个问题很奇怪,百思不得其解?

kanglau 2002-04-04 11:07:21
在一个类中写了这样一个方法,如下:
public static Shape randShape(){
switch((int)(Math.random() * 3)){
case 1:
return new Circle();
case 2:
return new Square();
case 3:
return new Triangle();
default:
}
若不写default:和把default:放在最后则出错如下:
"Shapes.java": Error #: 466 : method does not return a value at line 4, column 34
但是把它放在case 1:上面则顺利通过。百思不得其解,请指教?
在jb5下编译。
...全文
70 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanglau 2002-04-04
  • 打赏
  • 举报
回复
也就是有的话会从case 1执行,这根没有default有什么区别?
swingcoder 2002-04-04
  • 打赏
  • 举报
回复
呵呵,放在最上面当然会执行一下default与case 2:之间的句子(如果有的话),没有default就没有这样的功能了。
kanglau 2002-04-04
  • 打赏
  • 举报
回复
楼上的朋友,如果照你所说,default:放在最上面(没有break;)与没有default:有什么区别?请指教?SuperMMX朋友。
aprim 2002-04-04
  • 打赏
  • 举报
回复
因为default:写在哪是无所谓的,但是判断顺序是从上倒下的

因为default:没有break;又写在第一位,所以不满足default:的条件,就继续
执行下一条语句。
SuperMMX 2002-04-04
  • 打赏
  • 举报
回复
default 没有 break, 会执行下面的 case 语句
知道找到一个 break.

好好看看 java 基本的东西吧.
kanglau 2002-04-04
  • 打赏
  • 举报
回复
为什么把default:放在case1:上面就可以顺利通过??
GJA106 2002-04-04
  • 打赏
  • 举报
回复
如果switch()中值在case中找不到匹配的值,就返回。但程序中并没有处理default分支没有的进应该返回什么,或者有default:时返加什么。而randShape()方法要求返回一个Shape。

在添加
default:
return null;
或者在整个switch()外边
return null;
iloveyouonlyonce 2002-04-04
  • 打赏
  • 举报
回复
因为default的情况下也要加返回值啊!

62,614

社区成员

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

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