2017-06-14 181 views
0

我很好奇爲什麼只讀取while語句中的這些條件之一。我希望while語句中的兩個條件對於while循環停止爲真。我認爲& &意味着兩個條件都必須爲TRUE,但我的程序只讀取首先到達的while語句中的任何條件,然後在沒有滿足其他條件的情況下終止。我在做什麼這個while語句錯了?條件運算符&& in java

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); 
+1

@RobbyCornelissen什麼做'了'和'B'有'x'做和'y' –

+1

這就是'&&'的工作原理。如果左側輸出錯誤,計算機不會打擾右側。 –

回答

2

是的。 &&意味着兩個條件必須爲真(如果第一個測試是錯誤的話它會短路) - 這會產生false。你想要||。這意味着只要條件成立,它就會繼續循環。

while(homePort.getNumWaiting() > 0 || partyPort.getNumWaiting() > 0); 
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; 
    } 
0

如果你想打破循環當兩個條件都爲真,則使用以下條件:

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