2013-05-03 48 views
0

我有以下張貼的方法,並顯示它返回布爾數據類型。我寫了return語句,但編譯器給了我一個錯誤:這個方法必須返回一個布爾類型的結果。返回語句是可用的,編譯器仍然要求它

Java代碼:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) { 
    boolean found = false; 

    if (arraylist.isEmpty()) 
     return false; 

    for (int i=0; i < arraylist.size(); i++) { 
     if (arraylist.get(i) == guess) 
      return true; 
     else continue; 
    } 
} 

回答

2

您需要for循環外的return。如果所有的if語句失敗,該方法需要返回一些東西。

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) 
{ 
    boolean found = false; 

    if (arraylist.isEmpty()) return found; 

    for (int i = 0; i < arraylist.size(); i++) 
    { 
     if (arraylist.get(i) == guess) found = true; 
    } 
    return found; // Add return here if all else fails 
} 
1

是的,你確實有return語句,但Java編譯器堅持認爲是對的代碼可能會跟隨執行的路徑上的全部可能性的return聲明。有可能for循環結束,然後沒有return語句。

在您的for循環結束後添加return false;聲明。

此外,else continue;是不必要的,因爲在for循環迭代中沒有別的要跳過。

1

我會根據你的寫法略微重構你的方法。

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) { 

    if (arraylist == null || arraylist.isEmpty()) 
     return false; 

    boolean found = false; 

    for (int guessItem : arraylist) { 
     if (guessItem == guess) { 
      found = true; 
      break; 
     } 

    } 
    return found; 
} 
1

帶返回類型的函數必須以return語句結尾;之前關閉大括號。

所以,解決的辦法是:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) { 
    boolean found = false; 

    if (arraylist.isEmpty()) 
     return false; 

    for (int i=0; i < arraylist.size(); i++) { 
     if (arraylist.get(i) == guess) 
      return true; 
     else continue; 
    } 
    return false; 
} 
+0

在每個控制路徑中包含return語句也是可以接受的。例如,'if(a)返回true;否則返回b;'編譯 – nullptr 2013-05-03 22:24:26

0

有一種編程風格,並非特定的Java,即堅持認爲,模塊化的代碼應該只有一個單一return語句結束。

在某些情況下,忽略此樣式規則會更明顯且便利,特別是在代碼塊開始處的返回語句儘早過濾出錯誤條件時更是如此。

儘管...您的代碼塊很短並且很甜蜜,所以樣式規則實際上使您的代碼更容易遵循和理解。它也使它更加簡單,因爲您不必擔心代碼中的其他返回語句返回給調用者的值。

TL; DR:我想嘗試這個,而不是去:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) { 

    boolean found = false; 

    if (!arraylist.isEmpty()) { 

     for (int i=0; i < arraylist.size(); i++) { 
      found = ((arraylist.get(i).integerValue() == guess)); 
      if (found) break; 
     } 
    } 

    return found; 
} 

編輯:我喜歡做的圖元嘍裝箱和拆箱。它培養了我在控制中的幻覺。

0

問題是你的條件不是常量,所以編譯器不能決定該方法是否總是返回一些東西。另外,較短的等效版本將是:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) { 
    return arraylist.contains(guess); 
} 
相關問題