【问题标题】:If statement Confusion for methodIf语句混淆方法
【发布时间】:2016-05-30 23:11:38
【问题描述】:

我在理解这段代码时遇到了问题

public void changeHealthCoefficient(double delta)

它将 delta 参数中传递的值添加到 healthCoefficient 实例变量。

参数delta可以是正数也可以是负数,但是如果healthCoefficient的新值小于等于MINIMUM_HEALTH_COEFFICIENT,除了改变healthCoefficient的值,还要设置isAlive实例变量为false

如果healthCoefficient 的新值大于MAXIMUM_HEALTH_COEFFICIENT,请将healthCoefficient 设置为MAXIMUM_ HEALTH_COEFFICIENT

我做到了

if (newHealthCoefficient  <= MINIMUN_HEALTH_COEFFICIENT)
    newHealthCoefficient = MINIMUN_HEALTH_COEFFICIENT

代替

newHealthCoefficient >= MAXIMUM_HEALTH_COEFFICIENT 

newHealthCoefficient = MAXIMUM_HEALTH_COEFFICIENT

【问题讨论】:

  • 由于缺乏格式,我很惊讶你能读懂它,更不用说理解它了。
  • 我尽力让它更具可读性,现在你只需要实际提出一个问题。
  • 对不起,我是这个论坛和 Java 的新手,但是我的 if 语句是什么?因为我做错了
  • 有人可以帮忙
  • @user6394146:这里的措辞令人困惑。究竟是什么问题?什么不工作?

标签: java


【解决方案1】:

强制最小值或最大值的一种简单方法是使用Math.minMath.max 方法。

例如:

healthCoefficient = Math.Min(healthCoefficient, MAXIMUM_HEALTH_COEFFICIENT);

将值设置为当前值和常数中的较小者。

根据您的问题,我建议您的健康系数值应属于其自己的类别。很长的变量名可能表明您正在尝试将变量与不相关类中的不相关变量区分开来。

因此,您的代码可能会更清晰,例如:

class HealthCoefficient {
    private static final double MAX = 100.0;
    private static final double MIN = 30.0;
    private double value;

    public void change(double delta) {
        value += delta;
        value = Math.min(value, MAX);
        value = Math.max(value, MIN);
    }

    public boolean isAlive() {
        return value > MIN;
    }
}

【讨论】:

    【解决方案2】:

    根据您的描述,您似乎想要这样的东西:

    public void changeHealthCoefficient(double delta)
    {
        // adds the value passed in the delta parameter to the 
        // healthCoefficient instance variable
        healthCoefficient += delta;
    
        // if the new value of healthCoefficient would be less than or equal 
        // to MINIMUM_HEALTH_COEFFICIENT , in addition to changing the value of 
        // healthCoefficient, set the isAlive instance variable to false.
        if (healthCoefficient  <= MINIMUN_HEALTH_COEFFICIENT)
        {
            isAlive = false;
        }
    
        // if the new value of healthCoefficient would be greater than 
        // MAXIMUM_HEALTH_COEFFICIENT, set healthCoefficient to 
        // MAXIMUM_HEALTH_COEFFICIENT.
        if (healthCoefficient > MAXIMUM_HEALTH_COEFFICIENT)
        {
            healthCoefficient = MAXIMUM_HEALTH_COEFFICIENT;
        }
    }
    

    【讨论】:

    • 当我使用 newHealthCoefficient 时,它说未找到变量,但在我的默认构造函数中,我有 public Guppy (double newHealthCoefficient)
    • 我不小心在第一个 if 语句中将它作为 newHealthCoefficient 。我更新了我的答案,将其设为 healthCoefficient。
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多