【问题标题】:Boolean method is not checking if statment布尔方法不检查 if 语句
【发布时间】:2015-05-25 19:14:01
【问题描述】:

我正在尝试编写布尔方法,但它不起作用

   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();
           }
 }

我应该如何为它创建布尔方法?

【问题讨论】:

  • 怎么不工作了?
  • 您遇到的错误是什么?也尝试使用布尔值。
  • 不要尝试使用布尔值。
  • 它会添加所有存在,即使它们的重量超过 maxWeight
  • 我需要使用布尔值

标签: java arrays if-statement methods boolean


【解决方案1】:

您需要在 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】:

    我注意到的主要区别是,当您 return true 时,它不会向 totWeight 添加任何内容。我也认为你想用类似的东西重置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;
    }
    

    【讨论】:

      【解决方案3】:

      在清理格式并比较你描述的两种方法后,我注意到一个主要的逻辑错误。

      在第一种方法中,您执行以下操作:

      如果为真,则返回真并停止运行该方法的其余部分。 - 如果为 false,则添加所有当前权重并返回 false

      在第二种方法中,您执行以下操作:

      如果为真,则返回真并继续运行该方法的其余部分。 - 如果为 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;
      

      }

      【讨论】:

      • 正如@Elliott Frisch 所说,您很可能希望在遍历循环之前将 totWeight 重置回 0,但我们可能错了。如果您列出的第二种方法可以满足您的要求,但没有返回值,请使用上述方法。
      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 2013-03-26
      • 1970-01-01
      • 2012-05-31
      • 2013-04-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多