我刚刚提出了一个问题,即根据给定条件返回一个布尔值。我想为了检查完全可能性的给定条件,我需要使用 for loop 。但是当我尝试编译它时,它会给我错误,可能是因为有不确定性使用for循环返回布尔值。这是一个原始问题:
Return true if the given string contains a "bob" string, but where the middle 'o' char can be any char.
bobThere("abcbob") → true
bobThere("b9b") → true
bobThere("bac") → false
这是我的代码:
public boolean bobThere(String str)
{
for(int i=0; i<str.length()-3; i++)
{
if (str.length()>=4): && str.charAt(i)=='b' && str.charAt(i+2)=='b')
{
return true;
}
else
return false;
else if (str.length()==4 && str.charAt(0)=='b' && str.charAt(2)=='b')
{
return true;
}
else
{
return false;
}
}
}
我只是想问: 1.我可以修复此代码以返回值。我的意思是,我可以使用for循环并返回给定条件的特定值吗?如果是的话,请你给我一个样品。 2.或者除了for循环之外还有其他方法来解决这个问题。
提前致谢。
答案 0 :(得分:4)
编译器错误几乎可以肯定是因为elseif
之后有else
。那是无效的。
查看代码,您似乎想要做的是遍历字符串,然后如果您位于true
字符串的开头,则返回b?b
。我不确定你为什么会有第二个if
条件 - 目前你的代码会在循环的每次迭代上检查字符串的第一个和第三个字符,如果字符串恰好是四个字符长。毫无意义,它不需要在那里。根本不需要检查长度。
此外,您的循环结束条件目前为i < string.length()-3
。这意味着不会检查字符串的最后三个字符。您需要将其更改为i <= string.length()-3
或i < string.length()-2
才能解决此问题。
你else return false
的东西会给你一个严重的问题。您的代码将进入循环一次,然后返回true或false,而不会进入循环的下一阶段。你应该做的是循环遍历字符串,如果你找到了你想要的东西,返回true
。否则,根本不要返回,继续循环。如果你到达循环结束,这意味着你从未找到你想要的东西,所以你可以在那时返回false
。
考虑到这些意见后,您修改后的代码将如下所示(请注意我没有编译或运行此代码):
public boolean bobThere(String str)
{
for(int i = 0; i <= str.length() - 3; i++)
{
if (str.charAt(i) == 'b' && str.charAt(i + 2) == 'b')
{
return true;
}
}
return false;
}