布尔变量解释
问题描述:
我对这段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);
}
}
}
答
然后在for循环,它说:只要添加的是真实的
其实,它说的是相反的。再看看:
for (int i = 0; !added && i < cars.size(); i++)
!
是 '逻辑逆'(或not
)运算符。所以这个声明实际上是说'只要我们没有加入,就停留在for循环中,我就小于汽车的大小'。
据推测,在某一点cars.get(i).tryToAdd(p)
将返回true
,for循环将终止。或者你用完cars
。无论哪种方式循环运行至少一次迭代(只要你有至少一辆车)。
答
!
与布尔值相反。
您正在执行一个循环来说除非添加一个人(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
答
你很困惑。其实,
if(!added)
{
//code
}
这个条件等于 “!”
if(added == false)
{
//code
}
所以你的逻辑说,加入到“true'`
检查
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:21for循环中的条件表示:只要添加** false **(和“我'小于汽车的数量),做循环。 – 2014-12-08 04:47:26
你怎么没看到!运算符在循环中添加变量之前 – 2014-12-08 05:19:20