gpt4 book ai didi

java - 为什么这个 while 循环是无限的?

转载 作者:行者123 更新时间:2023-12-02 08:38:03 25 4
gpt4 key购买 nike

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 boolean 变量。但是,我不确定这如何影响程序,因为我的 while 循环条件为 while (window.contains(next)) 。但是,我将逐一删除 next 的出现,因此最终 while (window.contains(next)) 将必须返回 false 并且 while 循环必须中断。我的推理可能存在缺陷,但使用删除行 window.remove(window.indexOf(next));

或者我的推理的其他部分是否有缺陷?

最佳答案

您犯了经典的 === 错误

while (nextMatches = true) 

应该是

while(nextMatches)

作为一般规则,不要将 boolean 值与 truefalse 进行比较。在我看来,它只会导致这些奇怪的错误,并使代码不太清晰。如果您正确命名变量,Java 约定中的 boolean 值听起来就像条件语句。例如:isEmptyisFull。这样读起来就像英语:while(isFull)

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

关于java - 为什么这个 while 循环是无限的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com