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

JavaFX太阳系模拟问题:已设为不可移动的太阳仍发生位移

问题原因与修复方案

核心问题

你的代码存在字段与判断逻辑不匹配的关键问题:

  • CelestialBody类中定义的控制天体是否可移动的字段是isImmovable,初始化太阳时也正确设置为true
  • 但在updatePositions方法中,判断是否跳过位置更新的条件是body.isFixed(),这和isImmovable是完全无关的判断逻辑,导致太阳的不可移动标记没有被识别,依然会执行位置更新。

另外需要确认:CelestialBody类中如果存在isFixed()方法,它的返回值大概率和isImmovable字段无关(比如对应另一个未设置的isFixed字段,或默认返回false),这直接导致太阳的不可移动属性失效。

修复步骤

  1. 统一判断逻辑
    将updatePositions方法中的判断条件替换为对应isImmovable的判断:

    // 替换原有的if (body.isFixed())
    if (body.isImmovable()) {
        continue;
    }
    
  2. 确保CelestialBody有正确的getter方法
    检查CelestialBody类是否存在返回isImmovable字段的getter方法,如果没有,添加以下代码:

    public boolean isImmovable() {
        return this.isImmovable;
    }
    
  3. 循环范围检查(可选)
    当前循环从i=1开始,若太阳在bodies列表的索引0位置,本来不会被遍历到。但如果太阳被错误放在索引>=1的位置,需要确保判断条件能覆盖到它,或者调整循环起始索引为0后,通过isImmovable判断跳过它的位置更新。

验证修复

修改完成后,太阳的isImmovable=true会被正确识别,位置更新逻辑会被跳过,太阳将保持静止,行星可正常绕其运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:42