2014-11-13 29 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