2013-07-31 3 views
10

Мне позволено иметь заявление switch, которое решает, что вернуть? Например, я хочу вернуть что-то другое в зависимости от того, что придумал мой random generator. Eclipse дает мне ошибку, требующую от меня поставить оператор return за пределами switch. Не уверен, что искать так жаль, если это дубликат. Вот мой код:Могу ли я поставить оператор возврата в оператор 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

Возможный дубликат [Оператор Switch с возвратом - правильность кода] (http://stackoverflow.com/questions/3065438/switch-statement-with-returns-code-correctness) –

ответ

8

Извините, но в этом случае, почему бы не просто сделать:

Таким образом, вы можете избежать переключатель и все.

Надежда, что помогает,

2

Проблема не что у вас есть возвращаемое значение внутри 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()); 
     } 
    } 
} 

Обратите внимание на наилучшую практику использования генератора случайных чисел вне функции.

+0

есть ли что-нибудь, если ' Я должен использовать или просто «возвращать null»? – Col1107

+2

В Java есть случай по умолчанию. Однако, см. Ответ Рамона за то, что вы должны делать. :) –

+0

Спасибо за примечание о том, что оператор if не поймал это:) – Col1107

3

Вы можете поместить return внутри switch, но вам не нужно использовать switch в этом случае.

0

Оператор возврата возвращается из всей функции, в которой он используется. Поэтому я думаю, что хорошо, что под коммутатором не должно быть других полезных строк кода, если вы хотите использовать оператор return в коммутаторе.

Смежные вопросы