有人能告诉我为啥这个方法会进入无限循环吗?
Posted
技术标签:
【中文标题】有人能告诉我为啥这个方法会进入无限循环吗?【英文标题】:Can someone tell me why this method is going into an infinite loop?有人能告诉我为什么这个方法会进入无限循环吗? 【发布时间】:2016-03-03 12:05:47 【问题描述】:因此,如果 if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber() 语句为真,我不知道为什么,那么这个方法似乎会进入无限循环。
public boolean printBorrower(String printLibraryNumber)
int index = 0;
boolean isPrinted = false;
while(index < currentIndex)
if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))
borrowersArray[index].printBorrowerDetails();
isPrinted = true;
else
index++;
isPrinted = false;
if(isPrinted == false)
System.out.println("Borrower with library number " + printLibraryNumber + " not found.");
return isPrinted;
【问题讨论】:
【参考方案1】:紧接着:
isPrinted = true;
添加
return isPrinted;
我认为应该这样做。祝你好运!
【讨论】:
【参考方案2】:这是你的循环条件:
while(index < currentIndex)
如果这是真的:
printLibraryNumber.equals(borrowersArray[index].getLibraryNumber())
然后你这样做:
borrowersArray[index].printBorrowerDetails();
isPrinted = true;
这意味着index
和currentIndex
都没有被修改。所以你的循环条件仍然成立。它将继续是真的。
为了退出循环,循环条件在某些时候需要为假,或者您需要使用return
或break
语句。 (或者,好吧,抛出异常或以某种方式导致系统失败。但这有点激烈。)
【讨论】:
【参考方案3】:因为,当if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))
是true
时,您不会更改index
。因此,它会在下一次循环迭代中测试相同的索引。哪里是真的。因此是一个无限循环。我想你想要类似的东西,
int index = 0;
while (index < currentIndex)
if (printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))
borrowersArray[index].printBorrowerDetails();
return true;
index++;
System.out.printf("Borrower with library number %s not found.%n", printLibraryNumber);
return false;
【讨论】:
所以现在我有了这个; gist.github.com/anonymous/516ac35d783e947a5abb 但还是会死循环? 当条件为 true 时,您仍然没有更改index
。【参考方案4】:
自从
if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))
statement 总是true
,if 代码块会被执行,而 else 块不会。而且由于您没有更改 if 块中的 index
变量,因此您会进入 无限循环,因为它是 index
变量将决定何时停下来。
您需要在任何条件代码块的外部增加index
变量:
while(index < currentIndex)
if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))
borrowersArray[index].printBorrowerDetails();
isPrinted = true;
else
isPrinted = false;
index++; // increment here
【讨论】:
以上是关于有人能告诉我为啥这个方法会进入无限循环吗?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 React JS 中的代码会进入满足这两个条件的无限循环?