10

我是否可以有一个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();
    }
}
4

4 回答 4

12

抱歉,但在这种情况下,为什么不干脆做:

return wordsShapes[i].toString();

这样你就可以避免开关和所有。

希望有帮助,

于 2013-07-31T03:29:39.897 回答
5

你可以放在return里面,但在这种情况下switch你不需要使用。switch

于 2013-07-31T04:06:13.737 回答
2

问题不在于语句中有 return 语句switch,这很好,但在 switch 语句之后没有 return 。如果你的 switch 语句完成但没有返回,现在会发生什么?

Java 的规则要求通过一个值返回函数的所有路径都遇到一个return语句。在您的情况下,即使知道iof 的值总是会导致 areturn来自开关的值,Java 编译器也不够聪明,无法确定这一点。

(旁白:顺便说一句,您实际上并没有阻止生成值 0 ;也许您if应该是while.)

附录:如果您有兴趣,这里有一个实现。有关实时示例,请参见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());
        }
    }
}

请注意在函数外部定义随机数生成器的最佳实践。

于 2013-07-31T03:27:44.843 回答
0

return 语句将从使用它的整个函数中返回。所以我认为如果你想在 switch 中使用 return 语句,那么在 switch 下方没有其他有用的代码行是很好的。

于 2016-08-10T09:56:27.150 回答