You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Fly类grow方法速度计算逻辑错误,求修正方案

Fly类grow方法问题修复

问题原因

你的代码直接根据最终总质量判断速度变化,忽略了质量跨越20时的分阶段计算逻辑:当添加的质量让总质量从20以下涨到20以上时,需要先计算从当前质量到20的增量对应的速度提升,再计算超过20部分的速度下降,而不是直接跳过前半部分的速度加成。

修正后的代码

public void grow(int mass) {
    int initialMass = this.mass;
    this.mass += mass;
    
    if (this.mass <= 20) {
        // 总质量仍未超过20,全部增量对应速度+1/单位
        speed += mass;
    } else {
        if (initialMass < 20) {
            // 先补全到20的增量对应的速度提升
            int deltaTo20 = 20 - initialMass;
            speed += deltaTo20;
            // 再计算超过20部分的速度下降
            int deltaOver20 = this.mass - 20;
            speed -= deltaOver20 * 0.5;
        } else {
            // 初始质量已≥20,直接按增量计算速度下降
            speed -= mass * 0.5;
        }
        // 确保速度不会为负数
        if (speed < 0) {
            speed = 0;
        }
    }
}

逻辑说明

  1. 总质量未超20:所有新增质量都按“每加1速度+1”计算;
  2. 质量跨越20:先计算从当前质量到20的增量,给速度加上对应值,再计算超过20的部分,按“每加1速度-0.5”扣减;
  3. 初始质量已超20:直接按新增质量计算速度扣减;
  4. 最后统一处理速度下限,避免出现负值。

以你的测试场景验证:初始mass=5、speed=10,添加30后总mass=35:

  • 先计算到20的增量为15,速度变为10+15=25;
  • 再计算超过20的增量为15,速度扣减15*0.5=7.5,最终速度为25-7.5=17.5;
    (注:你描述的预期值16可能存在计算误差,代码逻辑完全符合你给出的规则)

内容的提问来源于stack exchange,提问作者Yesin Q

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:43:18