当我在while循环的最后一行中有startIndex++
时,它会导致无限循环,但使用startIndex +
1,程序运行正常。我想知道为什么会这样?
public static int numOccurrences(String src, String q) {
int startIndex = src.indexOf(q);
int counter = 0;
while (startIndex != -1) {
counter++;
startIndex = src.indexOf(q, startIndex + 1);
}
return counter;
}
答案 0 :(得分:3)
考虑会发生什么 - 如果indexOf
失败,则返回-1
。如果你之后有一个盲startIndex++
,那么你的startIndex会变成0
,循环会回绕,0 != -1
为TRUE,继续循环。你会得到另一个-1
,将其增加到0
,并且你周围和周围 - 搜索,失败,递增,循环/重复。
答案 1 :(得分:3)
表达式startIndex++
增加变量startIndex
的值,但它返回旧值startIndex
。在评估包含startIndex++
的表达式后,您将结果分配给startIndex
。这意味着在您的情况下,丢弃增量并且startIndex++
和startIndex
将具有完全相同的结果:每次都会发现相同的事件,并且您有一个无限循环。
另一方面,表达式startIndex + 1
不会更改startIndex
的值,但会计算为startIndex
值之后的整数。现在indexOf
在找到的事件发生后开始搜索,因此您没有无限循环。