我正在尝试编写布尔方法,但它不起作用
public boolean addPresent(Present present)
{
if(totWeight+present.getWeight()<=maxWeight)
{
presents.add(present);
presents1.add(present);
return true;
}
for(Present pres : presents1)
{
totWeight+=pres.getWeight();
}return false;
}
如果我写这个方法,它会起作用:
public void addPresent(Present present)
{
if(totWeight+present.getWeight()<=maxWeight)
{
presents.add(present);
presents1.add(present);
System.out.println("true");
}else
{ System.out.println("false");
}
for(Present pres : presents1)
{
totWeight+=pres.getWeight();
}
}
我该怎么做布尔方法呢?
答案 0 :(得分:0)
我注意到的主要区别在于totWeight
时它不会向return true
添加任何内容。我还认为您希望使用类似
total
public boolean addPresent(Present present) {
boolean r = false;
if (totWeight + present.getWeight() <= maxWeight) {
presents.add(present);
presents1.add(present);
r = true;
}
totWeight = 0; // <-- reset total.
for (Present pres : presents1) {
totWeight += pres.getWeight();
}
return r;
}
答案 1 :(得分:0)
您需要在for循环之前返回false,或者在检查权重小于maxWeight的条件中包含for循环。 或者您可以将当前的权重添加到totWeight,不需要for循环。
public boolean addPresent(Present present){
if(totWeight+present.getWeight()<=maxWeight){
presents.add(present);
presents1.add(present);
totWeight += present.getWeight();
return true;
}
return false;
}
答案 2 :(得分:0)
清理格式并比较你描述的两种方法后,我注意到一个主要的逻辑错误。
在第一种方法中,您执行以下操作:
如果为true,则返回true并停止运行方法的其余部分。 - 如果为false,则添加所有当前权重并返回false
在第二种方法中,您执行以下操作:
如果为true,则返回true并保持KEEP运行方法的其余部分。 - 如果为false,则添加所有当前权重并返回false
如果第一种方式是您想要的方式,请在方法的开头声明一个布尔值,并根据测试结果将其设置为true或false,然后返回该布尔值。这样你就可以推迟实际的返回语句,直到你完成计算。
public boolean addPresent(Present present)
{
boolean temp = false;
if(totWeight+present.getWeight()<=maxWeight)
{
presents.add(present);
presents1.add(present);
temp = true;
}
for(Present pres : presents1)
{
totWeight+=pres.getWeight();
}
return temp;
}