我对这个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
}
}
}