Ответ 1
Извините, но в этом случае почему бы просто не сделать:
return wordsShapes[i].toString();
Таким образом вы можете избежать переключения и всех.
Надеюсь, что это поможет,
Могу ли я иметь оператор 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();
}
}
Извините, но в этом случае почему бы просто не сделать:
return wordsShapes[i].toString();
Таким образом вы можете избежать переключения и всех.
Надеюсь, что это поможет,
Вы можете поместить return
внутрь switch
, но в этом случае вам не нужно использовать switch
.
Проблема заключается не в том, что у вас есть операторы return внутри оператора switch
, которые совершенно прекрасны, но после оператора switch нет возврата. Если ваш оператор switch завершится без возврата, что произойдет сейчас?
Правила Java требуют, чтобы все пути через возвращающую значение функцию встречались с оператором return
. В вашем случае, даже если вы знаете, что значение i
всегда будет иметь значение, которое вызовет из этого переключателя return
, компилятор Java недостаточно умен, чтобы определить это.
(ASIDE: Кстати, вы фактически не предотвратили создание значения 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());
}
}
}
Обратите внимание на лучшую практику того, что генератор случайных чисел определяется вне функции.
Оператор return вернется из всей функции, в которой он используется. Поэтому я думаю, что хорошо, что никакие другие полезные строки кода не должны находиться под коммутатором, если вы хотите использовать оператор return в коммутаторе.