我是否可以通过switch
声明决定返回什么?例如,我想根据我的随机生成器提出的内容返回不同的内容。 Eclipse给我一个错误,希望我将return
语句放在switch
之外。
我的代码:
public String wordBank() { //Error here saying: "This method must return a type of string"
String[] wordsShapes = new String[10];
wordsShapes[1] = "square";
wordsShapes[2] = "circle";
wordsShapes[3] = "cone";
wordsShapes[4] = "prisim";
wordsShapes[5] = "cube";
wordsShapes[6] = "cylinder";
wordsShapes[7] = "triangle";
wordsShapes[8] = "star";
wordsShapes[9] = "moon";
wordsShapes[10] = "paralellogram";
Random rand = new Random();
int i = rand.nextInt(11);
if (i == 0) {
i = rand.nextInt(11);
}
switch (i) {
case 1:
return wordsShapes[1].toString();
case 2:
return wordsShapes[2].toString();
case 3:
return wordsShapes[3].toString();
case 4:
return wordsShapes[4].toString();
case 5:
return wordsShapes[5].toString();
case 6:
return wordsShapes[6].toString();
case 7:
return wordsShapes[7].toString();
case 8:
return wordsShapes[8].toString();
case 9:
return wordsShapes[9].toString();
case 10:
return wordsShapes[10].toString();
}
}
答案 0 :(得分:8)
很抱歉,但在这种情况下,为什么不只是这样做:
return wordsShapes[i].toString();
这样你可以避免开关和所有。
希望有所帮助,
答案 1 :(得分:3)
您可以将return
放在switch
内,但在这种情况下您不需要使用switch
。
答案 2 :(得分:2)
问题不是你在switch
语句中有return语句,这完全没问题,但是在 switch语句之后你没有返回。如果你的switch语句没有返回就完成了,现在会发生什么?
Java规则要求通过值返回函数的所有路径都会遇到return
语句。在您的情况下,即使您知道i
的值始终是一个会导致来自交换机return
的值,Java编译器也不会足够聪明,可以确定。
(ASIDE:顺便说一句,你并没有真正阻止生成值0;也许你的if
应该是while
。)
ADDENDUM:如果您有兴趣,这是一个实现。有关实例,请参阅http://ideone.com/IpIwis。
import java.util.Random;
class Main {
private static final Random random = new Random();
private static final String[] SHAPES = {
"square", "circle", "cone", "prism", "cube", "cylinder", "triangle",
"star", "moon", "parallelogram"
};
public static String randomShapeWord() {
return SHAPES[random.nextInt(SHAPES.length)];
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
System.out.println(randomShapeWord());
}
}
}
请注意在函数外部定义随机数生成器的最佳实践。
答案 3 :(得分:0)
return语句将从使用它的整个函数返回。所以我认为如果你想在switch中使用return语句,那么在switch下面不能有其他有用的代码行是好的。