簡體   English   中英

有人能告訴我為什么這種方法會進入無限循環嗎?

[英]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()))

語句始終為trueif代碼塊將被執行,而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;

這意味着indexcurrentIndex都沒有被修改。 所以你的循環條件仍然是正確的。 它將繼續成真。

為了退出循環,循環條件在某些時候需要為false,或者您需要使用returnbreak語句。 (或者,好吧,拋出異常或以某種方式導致系統失敗。但這會有點激烈。)

緊接着:

isPrinted = true;

加入

return isPrinted;

我認為應該這樣做。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM