public Object countOccurrences(String string)
{
int e = 0;
int i = 0;
while ( i < sentence.length())
{
if(sentence.contains(string))
{
e++;
i++;
return e;
}
else
{
break;
}
}
return e;
}
我的代码有什么问题不允许我通过测试?无论如何我可以在循环中使用substring方法来做到这一点吗?
@Test
public void testCountOccurrences()
{
assertEquals(1, sc1.countOccurrences("ence"));
assertEquals(2, sc1.countOccurrences("en"));
assertEquals(1, sc2.countOccurrences("that"));
assertEquals(0, sc2.countOccurrences("This"));
}
答案 0 :(得分:7)
我的代码出了什么问题,不允许我通过测试?
在做任何其他事情之前,您应该考虑如何解决代码开始时出现的问题。你通过它调试了吗?它在什么时候表现得与你的预期不同?如果您尚未学习如何使用调试器,那么现在是开始的好时机。
关于下一步,请查看以下代码:
if(sentence.contains(string))
{
e++;
i++;
return e;
}
该条件不依赖于i
或e
,只取决于sentence
和string
。因此,只要sentence
的长度至少为1,您就会返回1或0.您的代码永远不会返回 more 而不是1。
目前你的代码出了什么问题 - 关于如何修复它,我开始关注String.indexOf(String, int)
。换句话说,您想要找到第一个匹配项,然后找到 next 出现,然后找到 next 出现,直到找不到为止。 (使用返回值来确定从哪里开始查看下一次迭代,以及检查是否存在匹配。)
有几种情况需要注意:
我还会提出其他一些改变:
Object
- 为什么?当然它总是会返回一个整数,所以返回类型int
会更合适答案 1 :(得分:0)
public Object countOccurrences(String string) {
int e = 0;
int i = 0;
while (i <= (sentence.length() - string.length() + 1)) {
if (sentence.substr(i, string.length() - 1).equals(string)) {
e++;
}
i++;
}
return e;
}
我自己没有尝试,但它应该有用。