2014-12-08 148 views
-1

我對這段Java代碼有疑問。 (是的,我是一名初學者)。代碼有效,我只是有點困惑。此代碼檢查人員和汽車數組,以查找它是否有空座位,這是tryToAdd方法的作用。然後它會將該人添加到該車。我的問題是關於布爾值。它看起來添加設置爲false。然後在for循環中說:只要添加的是真的..循環。所以,這個循環似乎永遠不會運行。布爾變量解釋

public void loadPassengers() { 
    for (Person p : people) { 
     boolean added = false; 
     for (int i = 0; !added && i < cars.size(); i++) { 
      added = cars.get(i).tryToAdd(p); 
     } 
    } 
} 
+0

檢查as long as *added* is false, keep iterating, and try to perform' added = cars.get(i).tryToAdd(p); ,設定值(NOT)運算符,它會使added = false爲true,如果added的值爲true,那麼循環永遠不會運行 – 2014-12-08 04:47:21

+0

for循環中的條件表示:只要添加** false **(和「我'小於汽車的數量),做循環。 – 2014-12-08 04:47:26

+0

你怎麼沒看到!運算符在循環中添加變量之前 – 2014-12-08 05:19:20

回答

3

然後在for循環,它說:只要添加的是真實的

其實,它說的是相反的。再看看:

for (int i = 0; !added && i < cars.size(); i++) 

!是 '邏輯逆'(或not)運算符。所以這個聲明實際上是說'只要我們沒有加入,就停留在for循環中,我就小於汽車的大小'。

據推測,在某一點cars.get(i).tryToAdd(p)將返回true,for循環將終止。或者你用完cars。無論哪種方式循環運行至少一次迭代(只要你有至少一輛車)。

0

!與布爾值相反。

您正在執行一個循環來說除非添加一個人(tryToAdd(p)返回true)執行循環。並且i < cars.size()稱汽車應該有座位添加人員。

在您的代碼中添加了解釋。

public void loadPassengers() { 
    boolean added; //Declaring added variable outside for loop for memory management 
    for (Person p : people) { //Execute loop for each person 
     added = false; //setting added value to false for each person 

     // unless person is added execute the loop and also check for the car size. 
     for (int i = 0; (added == false && i < cars.size()); i++) { // added == false or !added is same 
      added = cars.get(i).tryToAdd(p); // tryToAdd(p) return true to confirm that a person is added 
     } 
    } 
} 
+0

我認爲這回答了我的問題。 – 2014-12-10 02:54:06

0

你很困惑。其實,

if(!added) 
{ 
    //code 
} 

這個條件等於 「!」

if(added == false) 
{ 
    //code 
} 

所以你的邏輯說,加入到「true'`