我对这个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 :(得分:3)
然后在for循环中它说:只要添加为真
实际上,它说的恰恰相反。再看一下:
for (int i = 0; !added && i < cars.size(); i++)
!
是&#39;逻辑反转&#39; (或not
)运营商。所以这句话实际上是说只要我们没有添加并且我的价格低于汽车的大小,就会停留在for循环中。
据推测,在某些时候cars.get(i).tryToAdd(p)
将返回true
,并且for循环将终止。或者你用尽cars
。无论哪种方式,循环运行至少一次迭代(只要您至少有一辆汽车)。
答案 1 :(得分: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
}
}
}
答案 2 :(得分:0)
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); ,
设置值被添加到&#39; true&#39;`