java中疾病传播的公式

java中疾病传播的公式,java,Java,我有一个公式设定了病毒传播的初始速度,我希望它随着感染人数的增加而增加。所以我在java定时器中创建了一个公式,但当我启动程序时,速度是恒定的 void setInfected() { Virus virus = new Virus(this); spreadSpeed = (int)( (density + density) + (climate * virus.coldResistFactor) + (climate *

我有一个公式设定了病毒传播的初始速度,我希望它随着感染人数的增加而增加。所以我在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();
}

看起来您的
spreadSpeed
是一个int。因此,您对它执行的任何除法操作都会向下舍入

由于您没有将
(已感染/人口)
强制转换为int,它们可能都是int。这意味着除法也将向下舍入,这将导致0,直到感染人数超过人口

要解决此问题,可以将spreadSpeed设置为double而不是int,并将除法中的填充转换为double,以强制除法使用浮点数而不是整数。为了实现这一点,在从人群中删除人员/向受感染人群中添加人员时,您还需要将spreadSpeed转换为int