有人能告诉我为什么这种方法会进入无限循环吗?

时间:2015-11-29 22:04:54

标签: java arrays if-statement while-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;
}

4 个答案:

答案 0 :(得分:0)

以来
if(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))

语句始终为true if 代码块将被执行,&amp; else 块不会。由于您不会更改 if 块中的index变量,因此您会进入无限循环,因为它是{{ 1}}变量,决定何时停止

您需要增加任何条件代码块的index变量

index

答案 1 :(得分:0)

因为,当composer dumpautoloadif(printLibraryNumber.equals(borrowersArray[index].getLibraryNumber()))时,您不会更改true。因此,它在下一个循环迭代中测试相同的索引。这是真的。因此无限循环。我想你想要的东西,

index

答案 2 :(得分:0)

这是你的循环条件:

HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(buffer);

如果是这样的话:

while(index < currentIndex)

然后你这样做:

printLibraryNumber.equals(borrowersArray[index].getLibraryNumber())

这意味着borrowersArray[index].printBorrowerDetails(); isPrinted = true; index都未被修改。所以你的循环条件仍然是正确的。它将继续成真。

为了退出循环,循环条件在某些时候需要为false,或者您需要使用currentIndexreturn语句。 (或者,好吧,抛出异常或以某种方式导致系统失败。但这会有点激烈。)

答案 3 :(得分:0)

紧接着:

isPrinted = true;

加入

return isPrinted;

我认为应该这样做。祝你好运!