2014-11-13 26 views
0

嘗試查看數組並希望它在數組中包含名稱時返回true,如果數組中不包含則返回false。錯誤:在Java中丟失返回語句

public boolean ifInArray(String name) 
{ 
    for (Dog breed: breeds) { 
     if (breed.equals(name)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
+1

你需要移動回假外的for循環 –

+1

此外,這永遠不要向外界返回TRUE;。 '品種'是'Dog'類型,'name'是'String'類型,所以兩者不應該是平等的。如果你寫了'Dog.equals',以便在給定一個String時返回'true'(例如,如果String代表同一品種),那麼這是不正確的。 'equals'的合約要求它是對稱的 - 如果a.equals(b)'then'b.equals(a)'。由於你無法控制'String.equals'(特別是,當給定'Dog'時,絕不會讓它返回'true'),所以當給定一個String時,'Dog.equals'不應該返回'true' '。 – yshavit

回答

5

功能必須有所有可能性返回一個值。想想如果for循環在某些情況下不會執行,那麼會發生什麼?所以你必須給返回值的所有可能性

public boolean ifInArray(String name) 
{ 
    for (Dog breed: breeds) { 
     if (breed.equals(name)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
    return false; 
} 
+0

+1。特別是,如果「品種」是空的呢? – yshavit

+0

是的,這是我提到 – subash

+0

非常感謝,這是非常有道理的。 – tintanten

2

刪除ELSE塊放置return false循環結束後。如果它找到一個值,它將從循環內部返回true。如果它什麼都沒有找到,它將在循環結束後返回false。

如果第一個品種不匹配,您的當前實現將返回false,而不是檢查所有品種。

0

您可以將布爾值存儲在一個變量中,並返回該變量。

public boolean ifInArray(String name) 
{ 
    Boolean result = null; 
    for (Dog breed: breeds) { 
     if (breed.equals(name)) { 
      result = true; 
     } else { 
      result = false; 
     } 
    } 

    return result; 
} 
0

你有返回裏面如果,所以它不直接訪問的方法。如果是,那麼必須有一個默認值,尤其是因爲如果在for循環中。考慮一下字符串爲空的情況,該方法將無法返回。

寫你的方法是:

public boolean ifInArray(String name) 
{ 
for (Dog breed: breeds) { 
    if (breed.equals(name)) { 
     return true; 
    } else { 
     return false; 
    } 
} 
return false; 
} 
+0

謝謝你的工作! – tintanten

2

你只是在尋找在數組「品種」中的第一項,並立即返回真/假值。您需要迭代每個元素,並且只有在找到匹配項時才返回true。否則,返回false。

public boolean ifInArray(String name) 
 
{ 
 
    for (Dog breed: breeds) { 
 
     if (breed.equals(name)) 
 
      return true; 
 
    } 
 
    return false; 
 
}

+0

我怎樣才能讓它遍歷整個數組列表? – tintanten

+0

最初你的代碼會在第一次比較後返回true或false。如果品種與您的輸入字符串匹配,您只想返回true。所以你想刪除if/else塊的'else'部分,並且只有在遍歷每個條目並且從未找到匹配時才返回false。 –

+0

謝謝!我已經這樣做了,但現在每當我搜索它時,即使當我知道它在數組列表中時,也總是返回false – tintanten