2
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));

还是我推理的其他部分有缺陷?

4

4 回答 4

7

你犯了经典=vs==错误

while (nextMatches = true) 

应该

while(nextMatches)

作为一般规则,不要将布尔值与trueandfalse进行比较。在我看来,它只会导致这些奇怪的错误并使代码变得不那么清晰。如果您正确命名变量,Java 约定的布尔值听起来像一个条件。例如:isEmptyisFull。这种方式读起来像英语:while(isFull)

我对你的逻辑有点困惑,特别是因为int index = window.indexof(next)不会改变任何东西。索引将被重新定义。

于 2012-12-04T05:04:49.990 回答
4

问题就在这里 while (nextMatches = true)尝试 put 代替

while (nextMatches == true)
于 2012-12-04T05:05:51.920 回答
2

我发现了问题。就是这一行:int index = window.indexOf(next);。我一遍又一遍地重新定义index为相同的数字,这导致了无限循环。问题解决了!

于 2012-12-04T05:23:37.427 回答
2
while (nextMatches == true) {

此条件将是false当且仅当nextMatches分配给false

您分配它的唯一位置false是在以下代码块中:

if (afterNext != afterNextInWindow) {
    nextMatches = false;
    ...

因为,while对你来说是无限运行的,这意味着在代码执行时nextMatches永远不会分配false,即if条件总是false

这意味着,在 ; 的每次迭代whileafterNext总是等于afterNextInWindow

于 2012-12-04T05:37:06.093 回答