0

最近在开发一个计算器来简化游戏(reactoridle)时,我遇到了一个持续存在的问题。问题是,当 GUI 中的输入数字更改为特定边界之间的数字时,它会在按 enter 时立即恢复到其下方的数字,有时如果再次按 enter 甚至会重复。

我认为代码的一部分与另一部分不一致,即使它背后的数学是可靠的。

第一段代码计算热电池产生的热量,第二段代码重新计算每个组件处理热量所需的升级。所以说你现在正在进行的升级正好在代码工作和冲突的边界,如果你随后增加升级,它会立即恢复。由于第一段代码计算热量,而第二段代码决定您可以通过较少的升级来实现该热量。

相关的代码位是:

double insulationMultiplier = 1 + insulationPerCell * (insulationUpgrades + 1) * INSULATION_HEAT_MODIFIER;
            double upgradeMultiplier = Math.pow(Cell.HEAT_MULTIPLIER, cellUpgrades);
            this.heat = cells * insulationMultiplier * upgradeMultiplier * cell.heat * (1 + 0x4p-50d); //???
                                                                                        //avoid trouble when calculating cellUpgrades

            this.calculate(START_FROM_HEAT);


double insulationMultiplier = 1 + insulationPerCell * (insulationUpgrades + 1) * INSULATION_HEAT_MODIFIER; 
            double circulatorMultiplier = circulators ? CIRCULATOR_HEAT_MODIFIER * Math.pow(CIRCULATOR_HEAT_MULTIPLIER, circulatorUpgrades) : 1;

            cellUpgrades = (int) ((Math.log(this.heat) - Math.log(insulationMultiplier * cells * cell.heat)) / Math.log(Cell.HEAT_MULTIPLIER));

正如你所看到的,我通过将第一部分计算的热量乘以 来解决问题1 + 0x4p-50d,这样热量就可以调整到刚好足以防止算法的第二部分再次向下舍入升级并尽可能小到避免显示非常不同的热值。

同样的问题出现在与其他两个组件相关的并行代码中,但规模更大,因此它一次跳下多个数字。我不希望以与第一个组件相同的方式解决它,因为这可能会反过来与其他事情发生冲突。

有没有更严格的方法来解决这个问题?

提前致谢。

4

0 回答 0