条件运算符&&在java中

时间:2017-06-14 01:40:59

标签: java conditional

我很好奇为什么只读取while语句中的其中一个条件。我希望while语句中的两个条件都为true,以便while循环停止。我想&&意味着两个条件都必须为TRUE,但我的程序只读取while语句中首先达到的条件,然后在没有满足其他条件的情况下终止。我在这句话中做错了什么?

do
{
    if((count%2)==0)
    {   // even
        charlestonFerry.setCurrentPort(startPort);
        charlestonFerry.setDestPort(endPort);
        FerryBoat.loadFromPort(homePort);
        charlestonFerry.moveToPort(endPort);                

    }//End if
    else
    {   // odd
        charlestonFerry.setCurrentPort(endPort);
        charlestonFerry.setDestPort(startPort);
        FerryBoat.loadFromPort(partyPort);
        charlestonFerry.moveToPort(endPort);

    }//End else
    count++;
}while(homePort.getNumWaiting() > 0 && partyPort.getNumWaiting() > 0);

3 个答案:

答案 0 :(得分:2)

是。 &&表示条件必须为真(并且如果第一个测试为假,它会短路) - 这会产生false。你想要||。这意味着只要任一条件为真,它就会继续循环。

while(homePort.getNumWaiting() > 0 || partyPort.getNumWaiting() > 0);

答案 1 :(得分:0)

如前所述,您想使用 || 运算符,我还建议对代码结构进行一些改进。

不要在代码中添加注释,而是让​​代码自我记录。例如,将渡轮路线选择代码放在单独的方法 setFerryRoute 中。

您可以参考docs作为起点。

  private void setFerryRoute() {
    while (homePort.getNumWaiting() > 0 || partyPort.getNumWaiting() > 0) {
      if (isPortCountEven(count)) {
        charlestonFerry.setCurrentPort(startPort);
        charlestonFerry.setDestPort(endPort);
        FerryBoat.loadFromPort(homePort);
      } else {
        charlestonFerry.setCurrentPort(endPort);
        charlestonFerry.setDestPort(startPort);
        FerryBoat.loadFromPort(partyPort);
      }
      charlestonFerry.moveToPort(endPort);
      count++;
    }
  }

  // This function is not needed, I have created it just to give you
  // another example for putting contextual information in your
  // function, class and variable names.
  private boolean isPortCountEven(int portCount) {
    return (portCount % 2) == 0;
  }

答案 2 :(得分:0)

如果要在两个条件都为真时中断循环,则使用以下条件:

while(!(homePort.getNumWaiting() > 0 && partyPort.getNumWaiting() > 0))