int MATCH_LENGTH = 0;
int FINAL_MATCH_LENGTH = 0;
int FINAL_MATCH_POS = 0;
while (window.contains(next)) {
int MATCH_POS = window.indexOf(next);
boolean nextMatches = true;
while (nextMatches = true) {
int index = window.indexOf(next);
index++;
int positionOfNext = fileArray.indexOf(next);
positionOfNext++;
MATCH_LENGTH++;
char afterNext = fileArray.get(positionOfNext);
char afterNextInWindow = window.get(index);
if (afterNext != afterNextInWindow) {
nextMatches = false;
if (MATCH_LENGTH > FINAL_MATCH_LENGTH) {
FINAL_MATCH_POS = MATCH_POS;
FINAL_MATCH_LENGTH = MATCH_LENGTH;
MATCH_LENGTH = 0;
}
window.remove(window.indexOf(next));
}
}
}
我在这里遇到了一个无限循环。我认为这是因为nextMatches
布尔变量。但是,我不确定这会如何影响程序,因为while
循环的条件为while (window.contains(next))
。但是,我逐个删除next
的出现次数,因此最终while (window.contains(next))
必须返回false并且while
循环必须中断。尽管使用删除行window.remove(window.indexOf(next));
,我的推理可能存在缺陷。
或者我推理的其他部分有缺陷吗?
答案 0 :(得分:7)
您犯了经典=
vs ==
错误
while (nextMatches = true)
应该是
while(nextMatches)
作为一般规则,不要将布尔值与true
和false
进行比较。它只是导致了这些奇怪的错误,并使我认为代码不太清晰。如果你正确地命名变量,Java约定的布尔声听起来像条件。例如:isEmpty
或isFull
。这样的事情就像英语:while(isFull)
我对你的逻辑感到有点困惑,特别是因为int index = window.indexof(next)
不会改变任何东西。索引将被重新定义。
答案 1 :(得分:4)
问题出在while (nextMatches = true)
尝试改为
while (nextMatches == true)
答案 2 :(得分:2)
while (nextMatches == true) {
如果false
被nextMatches
分配,则此条件为false
。
您分配的唯一地点false
位于以下代码块中:
if (afterNext != afterNextInWindow) {
nextMatches = false;
...
因为,while
对您来说无限运行,这意味着代码执行时nextMatches
永远不会被赋予false
,即 if
条件总是{{ 1}} 强>
这意味着,在false
的每次迭代中都是如此; while
始终等于afterNext
。
答案 3 :(得分:1)
我发现了问题。就是这一行:int index = window.indexOf(next);
。
我一遍又一遍地重新定义index
作为相同的数字,这导致了无限循环。问题解决了!