我有一个公式来设置病毒传播的初始速度,我希望它随着感染人数的增加而增加。所以我在java定时器中创建了一个公式,但是当我启动我的程序时,速度是恒定的。
void setInfected() {
Virus virus = new Virus(this);
spreadSpeed = (int)( (density + density) +
(climate * virus.coldResistFactor) + (climate * virus.heatResistFactor) +
(economy * virus.medResistFactor) + (tourism * virus.airEffFactor) +
(humidity * virus.touchEffFactor) + (dead * virus.plagueFactor));
deadSpeed = (int)( (density * virus.lethalFactor) );
spreadTimer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(!Game.isPaused) {
infected += spreadSpeed;
population -= infected;
dead += deadSpeed;
infected -= dead;
spreadSpeed = population > 0 ? spreadSpeed + ( infected / population ) : 0;
deadSpeed = population > 0 ? ( deadSpeed * ( infected * virus.lethalFactor ) ) / population : 0;
System.out.println("infected: " + infected);
System.out.println("dead: " + dead);
System.out.println("population: " + population);
}
}
});
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
spreadTimer.start();
}
});
thread.start();
}发布于 2021-05-19 20:24:35
看起来你的spreadSpeed是一个整数。正因为如此,你对它所做的任何除法运算都会四舍五入。
由于您没有将(infected / population)转换为整数,因此它们可能都是整数。这意味着除法也将向下舍入,这将导致0,直到感染人数超过人口。
要解决此问题,您可以将spreadSpeed设置为双精度型而不是整型,并将除法中的种群强制转换为双精度型,以强制除法使用浮点数而不是整数。为了实现这一点,您还需要在从人群中移除人员/向受感染的人群中添加人员时将spreadSpeed转换为int。
https://stackoverflow.com/questions/67602986
复制相似问题