2014-01-29 3 views
1

Eclipse는 메소드에 return 문을 추가하는 것을 계속합니다.Java return statement

public class PrefixCode { 
    public String isOne(String[] words) { 
     if(words.length==1) { 
      return "Yes"; 
     } 
     ArrayList<Integer> indexPositions= new ArrayList<Integer>(); 
     for(int i=0;i<words.length;i++) { 
      String firstWord=words[i]; 
      java.util.List<String> listOfWordsToCheck = new ArrayList<String>(Arrays.asList(words)); 
      listOfWordsToCheck.set(i,null); 
      for(int j=0;j<listOfWordsToCheck.size();j++) { 
       String secondWord= listOfWordsToCheck.get(j); 
       if(firstWord.startsWith(secondWord)==true) { 
        indexPositions.add(j); 
       } 
       else if(firstWord.startsWith(secondWord)==false); 
      } 
     } 
     if(indexPositions.size()==0) { 
      return "Yes"; 
     } 
     else if(indexPositions.size()!=0) { 
      Collections.sort(indexPositions); 
      return "No,"+indexPositions.get(0)+""; 
     } 
    } 
} 

내 반환 문은 for 루프 외부에 있으므로 여기에 무슨 문제가 있는지 이해하지 못합니다.

+12

'if'조건과 'else if'조건이 'false'로 해결되면 어떻게됩니까? 이 경우 귀하의 방법은 무엇을 반환해야합니까? –

답변

6

기본 반환 값은 없습니다. 당신이 만들고있는 유일한 수익은 if입니다. 조건들이 거짓이라면?

else 블록 다음에 return을 추가하면 모두 정상적으로 작동합니다.

else 블록은 중복됩니다. else 블록 안에있는 내용은 else이 없어야합니다.

2

if, else if을 추가 했으므로 컴파일러를 만족하려면 해당 제어 흐름을 사용해야합니다. 논리적으로 크기는 0이거나 0보다 클 수 있습니다. if 조건의 성공을 위하여려고하는 경우에 따라서, 당신은 당신으로이 논리를 단순화 할 수 있습니다 만

 if(indexPositions.size()==0){ 
     return "Yes"; 
    } else if(indexPositions.size()!=0){ 
     Collections.sort(indexPositions); 
     return "No,"+indexPositions.get(0)+""; 

    } else { 
    // return what? 
    } 

ifelse 부분

if(indexPositions.size() == 0) { 
    return "Yes"; 
} else { //size more than zero 
    Collections.sort(indexPositions); 
    return "No,"+indexPositions.get(0) + ""; 
} 
+0

세 번째 옵션은 없습니다. "else if"를 "else"로 대체하십시오. – Puce

+0

@Puce, Yes, 대답을 업데이트했습니다. –

1

컴파일러는 모르는이 필요합니다. 그래서, 당신은 그 if에서 기본 return을 추가해야합니다 (if 조건이 가능한 모든 경우를 포함하더라도!)

2

당신은 부울을 선언하는 대신

else if(indexPositions.size() != 0) { 
    Collections.sort(indexPositions); 
    return "No,"+indexPositions.get(0) + ""; 
} 
+0

왜 'else'블록을 사용하고 왜 간단한 블록을 사용하지 않습니까? – niyasc

0

else을 나는 보통이 작업을 수행 사용해야합니다 함수의 시작 부분에서 거짓으로 설정하십시오. 어떤 이유로 든 함수는 변수가 true가 될 것이라고 말합니다. true를 반환하는 대신 선언 된 변수를 true로 설정했습니다. 함수의 끝에서 선언 된 변수를 반환합니다.

그런 다음 기본 반환 값을 가지며 변수가 true로 설정된 경우 true를 반환합니다.

0

가장 좋은 방법 중 하나는 메소드 끝에 한 번만 리턴하는 것입니다. 이처럼 :

public String isOne(String[] words) { 
    String isOne = null; 

    if(words.length==1){ 
     isOne = "Yes"; 
    } 

    ... 

    if(indexPositions.size()==0){ 
     isOne = "Yes"; 
    } 
    else if(indexPositions.size()!=0){ 
    Collections.sort(indexPositions); 
    isOne = "No,"+indexPositions.get(0)+""; 
    } 

    return isOne; 
} 

은 때때로 당신은이 경우에 필요하지 않은 경우에도, 너무 디폴트 값으로 변수를 초기화 할 수 있습니다

String isOne = "No"; 

을 코드에 "오류"가 아니라에서, indexPositions.size는 0 이상일 수 있으므로 else if 대신 else를 사용하여 그래프를 완성 할 수 있습니다. 이 경우 eclipse는 return 문을 조건문 블록에 추가하더라도 더 이상 return 문을 추가하라고 지시하지 않습니다.

if(indexPositions.size()==0) { 
    return "Yes"; 
} 
else { 
    Collections.sort(indexPositions); 
    return "No,"+indexPositions.get(0)+""; 
}