![](/img/trans.png)
[英]Can someone tell me why this is not printing the correct score; it just exits out of the loop
[英]Can someone tell me why this method is going into an infinite loop?
因此,如果if(printLibraryNumber.equals(borrowersArray [index] .getLibraryNumber()語句為true)並且我不知道為什么,這個方法似乎進入無限循環。
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;
}
自從
if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))
語句始終為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
}
因為,當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;
這是你的循環條件:
while(index < currentIndex)
如果是這樣的話:
printLibraryNumber.equals(borrowersArray[index].getLibraryNumber())
然后你這樣做:
borrowersArray[index].printBorrowerDetails();
isPrinted = true;
這意味着index
和currentIndex
都沒有被修改。 所以你的循環條件仍然是正確的。 它將繼續成真。
為了退出循環,循環條件在某些時候需要為false,或者您需要使用return
或break
語句。 (或者,好吧,拋出異常或以某種方式導致系統失敗。但這會有點激烈。)
緊接着:
isPrinted = true;
加入
return isPrinted;
我認為應該這樣做。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.