2013-07-31 8 views
10

반환 할 내용을 결정하는 switch 문을 사용할 수 있습니까? 예를 들어, 내 random generator이 무엇을 기반으로하는지 다른 것을 돌려주고 싶습니다. 이클립스는을외부에 넣으려는 오류를 내게주고있다. 이것이 중복되는 경우에 무엇을 찾을 지 미안합니다. 여기 내 코드입니다 :switch 문 안에 return 문을 넣을 수 있습니까?

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

[Return - 코드 정확성을 가진 Switch 문] 가능한 복제본 (http://stackoverflow.com/questions/3065438/switch-statement-with-returns-code-correctness) –

답변

8
죄송

하지만,이 경우에, 왜 그냥 간단하게 수행하면 스위치 모두를 피할 수

이 방법. 당신은 switch 내부 return을 넣을 수 있지만,이 경우 switch를 사용할 필요가 없습니다 도움이

희망,

2

문제가되지는 완벽하게 잘있는 switch 문 안쪽 문을 반환해야한다는 것입니다,하지만 당신은 switch 문 이후에는 반환 이 없습니다. switch 문이 반환하지 않고 완료되면 지금 어떻게됩니까?

Java 규칙에 따라 값 반환 함수의 모든 경로에 return 문이 발생해야합니다. 귀하의 경우에는 i의 값을 알게 되더라도 항상 스위치에서 return이되는 값이됩니다. Java 컴파일러는이를 결정할만큼 똑똑하지 않습니다.

는 (제외 : 그건 그렇고, 당신이 실제로 생성되는 값 0을 방지하지 않았다 어쩌면 당신의 ifwhile해야합니다.)

칙 : 당신이 관심이 경우에는 여기에서 구현입니다. 실제 예제는 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

'else if' like 성명서를 사용해야합니까 아니면 그냥'귀환해야합니까? ' – Col1107

+2

자바에는'default' 케이스가 있습니다. 그러나, 당신이해야 할 일에 대한 라몬의 대답을보십시오. :) –

+0

if 문에 대한 메모를 보내 주셔서 감사합니다.) – Col1107

0

return 문은 사용되는 전체 함수에서 반환됩니다. 따라서 스위치에서 return 문을 사용하려면 다른 유용한 코드 줄이 스위치 아래에 있어야합니다.