java中疾病传播的公式
我有一个公式设定了病毒传播的初始速度,我希望它随着感染人数的增加而增加。所以我在java定时器中创建了一个公式,但当我启动程序时,速度是恒定的java中疾病传播的公式,java,Java,我有一个公式设定了病毒传播的初始速度,我希望它随着感染人数的增加而增加。所以我在java定时器中创建了一个公式,但当我启动程序时,速度是恒定的 void setInfected() { Virus virus = new Virus(this); spreadSpeed = (int)( (density + density) + (climate * virus.coldResistFactor) + (climate *
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();
}
看起来您的
spreadSpeed
是一个int。因此,您对它执行的任何除法操作都会向下舍入
由于您没有将(已感染/人口)
强制转换为int,它们可能都是int。这意味着除法也将向下舍入,这将导致0,直到感染人数超过人口
要解决此问题,可以将spreadSpeed设置为double而不是int,并将除法中的填充转换为double,以强制除法使用浮点数而不是整数。为了实现这一点,在从人群中删除人员/向受感染人群中添加人员时,您还需要将spreadSpeed转换为int