2012-12-04 196 views
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));为什么这个while循环无限?

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

+0

什么窗口?你永远不会说明 – jozefg

+0

'window'是一个长度为30的数组,'fileArray'是一个数组。我从'fileArray'拷贝出'window.size()'长度的数组来创建'window'数组。 – Zwischenzug

+0

你的意思是arraylist? char []没有方法indexOf – jozefg

回答

4

的问题是在这里while (nextMatches = true)尽量把替代

while (nextMatches == true) 
+3

我删除该文本,因为您没有信心回答。当你回答时你应该自信地做,如果你错了,人们会警告你。 – dreamcrash

+0

感谢dreamcrash的支持。 –

7

您做出的经典= VS ==错误

while (nextMatches = true) 

应该

while(nextMatches) 

一般来说,不布尔比较truefalse。它只是导致这些奇怪的错误,并使我的意见中的代码更清晰。如果你正确地命名你的变量,Java约定就像布尔条件一样。例如:isEmptyisFull。这样的事情读取像英语:while(isFull)

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

+1

我想现在拍我自己... – Zwischenzug

+5

只是不要sla自己'while(faceDoesntHurt = true)' – aquinas

+0

等一下,但是我把'='换成了'=='并且循环仍然是无限的。 – Zwischenzug

1

我发现这个问题。这是这条线:int index = window.indexOf(next);。 我一再重复定义index为同一个数字,导致了无限循环。问题解决了!

2
while (nextMatches == true) { 

这种情况将是当且仅当falsenextMatches被分配有false

要指定它false,唯一的地方是在下面的代码块:

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

因为,while为您运行的是无限的,这意味着nextMatches不会与false分配的代码执行时,即if条件总是false

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