2014-01-29 200 views
1

Eclipse一直告訴我要向該方法添加return語句,即使我這樣做了。Java返回語句

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,您還需要其他控制流來滿足編譯器。從邏輯上說,大小可以是零或大於零。所以,你需要有ifelse部分僅

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

    } else { 
    // return what? 
    } 

可以簡化這個邏輯,

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

沒有第三種選擇。只需用「else」替換「else if」 – Puce

+0

@Puce,是的,更新了答案 –

1

編譯器不知道是否if條件會成功。所以,你需要添加一個默認return掉那些if的(即使你的if條件涵蓋所有可能的情況下!)

2

你應該通過聲明一個布爾使用else代替

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

爲什麼使用'else'塊,爲什麼不用一個簡單的塊呢? – niyasc

0

我平時這個在函數的開始處並將其設置爲false。如果因爲某種原因該函數說變量是真的。我將聲明的變量設置爲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,並且完成圖。在這種情況下,即使使用條件塊內的返回值,eclipse也不會告訴您再添加返回語句。

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