【问题标题】: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;
}

【问题讨论】:

    标签: java arrays if-statement while-loop


    【解决方案1】:

    紧接着:

    isPrinted = true;
    

    添加

    return isPrinted;
    

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

    【讨论】:

      【解决方案2】:

      这是你的循环条件:

      while(index < currentIndex)
      

      如果这是真的:

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

      然后你这样做:

      borrowersArray[index].printBorrowerDetails();
      isPrinted = true;
      

      这意味着indexcurrentIndex 都没有被修改。所以你的循环条件仍然成立。它将继续是真的。

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

      【讨论】:

        【解决方案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;
        

        【讨论】:

        【解决方案4】:

        自从

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

        statement 总是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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-28
          • 2022-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-15
          • 2021-12-08
          • 2021-05-31
          相关资源
          最近更新 更多