布尔变量解释



我对这个Java代码块有一个问题。(是的,我是初学者)。代码有效,我只是有点困惑。此代码检查人员和汽车数组以查找它是否有空座位,这就是 tryToAdd 方法的作用。然后它会将该人添加到该车上。我的问题是关于布尔值的。在我看来,添加设置为假。然后在 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);
        }
    }
}

然后在 for 循环中它说:只要添加是真的

实际上,它说的恰恰相反。再看:

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

!是"逻辑逆"(或not)运算符。所以这个说法实际上是在说"只要我们没有添加并且我小于汽车的大小,就留在 for 循环中"。

据推测,在某个时候,cars.get(i).tryToAdd(p)将返回true,并且 for 循环将终止。或者你用完cars.无论哪种方式,循环都会运行至少一次迭代(只要您至少有一辆汽车)。

你混淆了它。实际上

if(!added)
{
  //code
}

此条件等于:

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

所以你的逻辑说,as long as *added* is false, keep iterating, and try to perform' added = cars.get(i).tryToAdd(p); ,设置为"true"的设置值

!是布尔值的反比。

您正在执行一个循环,除非添加人员(返回 true)tryToAdd(p)否则执行循环。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
        }
    }
}