一道Java题,有点懵,虽然也可以说是数学题

  (人口估算) 美国人口调查局基于以下假设进行
口估算:
 每7秒有一个人诞生
  每13秒有一个人死亡
  ·每45秒有一个移民迁人
 编写一个程序,显示未来5年的每年人口数。假设

当前的人口是312032486,每年有365天
提示:Java中,整个整数相除,结果还是整数,小数部分被
去掉。例如,5/4等于1(而不是1.25),10/4是2(而不
是2.5)。如果想得到小数部分的精确结果,进行除法运算
的两个数之一必须一个具有小数点的数值。例如,5.0/4等
于1.25.10/4.0等于2.5

你可以直接算一年净增或减多少人口。例如7,13,45的最小公倍数为71345=4095。
那么出生了1345人,死亡了745人,迁入了7*13人。可以算得4095秒净增或减了多少人。然后看一年有多少个4095,最后算余数时间内增减了多少人。结果就是一年后的人数。
两年后的人数的话看两年有多少个4095,然后算余数。这样处理应该会比在一年的结果上算简单。
当然也可以用一个计数器进行模拟计算。计数器从0开始,每过7秒人口加一,每过13秒人口减一

这个可以用一个变量不断地加一代表时间系统,然后代码应该是这样的:


public class people{
    public static void main(String[] args) {
        Long i = 0L;
        //初始时间为0S
        Long d = 0L;
        //初始人数时间为0,这个单独为计算出生人数准备
        Long d1 = 0L;
        //初始死亡人数,这个单独为计算死亡人数准备
        Long d2 = 0L;
        //初始移民时间,这个单独为计算移民人数准备
        Long po = 312032486L;
        //初始人数为312032486
        byte r = 0;
        //触发whlie循环用的,本质上就这一个作用。其变量值后面不会修改
        Long xiaoshi = 0L;
        //后期计算年份用的
        byte nian = 0;
        while(r==0)
        {
            i=i+1;
            d=d+1;
            d1=d1+1;
            d2=d2+1;
            if (d/7>0){
                //此时时间来到7S,我们把计算人数的时间清零,并把人数加一
                d = d*0;
                po=po+1;
            }
            if (d1/13>0){
                //此时时间来到13S,我们将人数减一,并把计算死亡人数的时间清零
                d1 = d1*0;
                po = po-1;
            }
            if (d2/45>0){
                //此时时间来到45S,我们将人数加一,模拟迁民过来的人数,并将时间清零
                d2 = d2*0;
                po=po+1;
            }
            if (i/3600>0){
                //此时时间已经过去1小时,我们汇报当前人数,并创建一个新值,代表小时。
                ++xiaoshi;
                System.out.println("当前时间:"+xiaoshi);
                System.out.println("当前人数:"+po);
                if (xiaoshi/8760>0){
                    //一年有365x24=8760小时。当满足此条件时,我们将年份加1
                    nian=(byte) (nian+1);
                    if (nian==5){
                        //当年份等于5时,程序运行结束,汇报当前人数
                        System.out.println("程序运行结束,5年已模拟完成,当前人数:"+po);
                        System.out.println("本代码由CSDN@CTimet编写,感谢使用");
                        ++r;//使R=1,不继续运行下一次循环
                    }
                }
            }
        }
    }
}
/**
 * 本代码由CSDN@CTimet编写
 */

我试着运行了一下,结果显示最后美国5年增加了1000多人,我感觉不太对,但程序没错,按照你的数据做的,可能美国确实少人吧哈哈哈

你好,我之前在你这里发布了一段代码,后来根据别人的提示发现了代码BUG,于是我重新编辑了代码,新的代码如下:

public class people{
    public static void main(String[] args) {
        Long i = 0L;
        //初始时间为0S
        Long d = 0L;
        //初始人数时间为0,这个单独为计算出生人数准备
        Long d1 = 0L;
        //初始死亡人数,这个单独为计算死亡人数准备
        Long d2 = 0L;
        //初始移民时间,这个单独为计算移民人数准备
        Long po = 312032486L;
        Long po1 = 312032486L;
        //初始人数为312032486
        //记录数据po1,该数据为后期计算多了多少人使用,变量值后期不会改变
        byte r = 0;
        //触发whlie循环用的,本质上就这一个作用。其变量值后面会进行修改用以关闭whlie循环
        Long xiaoshi = 0L;
        //后期计算年份用的
        byte nian = 0;
        //年
        Long tian = 0L;
        //天
        while(r==0)
        {
            i=i+1;
            d=d+1;
            d1=d1+1;
            d2=d2+1;
            if (d/7>0)
            {
                //此时时间来到7S,我们把计算人数的时间清零,并把人数加一
                d = d*0;
                po=po+1;
            }
            if (d1/13>0)
            {
                //此时时间来到13S,我们将人数减一,并把计算死亡人数的时间清零
                d1 = d1*0;
                po = po-1;
            }
            if (d2/45>0)
            {
                //此时时间来到45S,我们将人数加一,模拟迁民过来的人数,并将时间清零
                d2 = d2*0;
                po=po+1;
            }
            if (i/3600>0){
                //此时时间已经过去1小时,我们汇报当前人数,并把小时加1,清零秒
                ++xiaoshi;
                i = i * 0;
                System.out.println("当前时间:第"+ nian +"年-"+tian+"天-"+xiaoshi+"小时");
                System.out.println("当前人数:"+po);
                if (xiaoshi/24>0)
                {
                    ++tian;
                    xiaoshi = xiaoshi * 0;
                    //清空小时,避免BUG
                    //汇报当天人数
                    if (tian/365>0)
                    {   
                        tian = tian*0;
                        //清空天数,防止出BUG
                        ++nian;
                    }
                }
                if (nian==5)
                {
                    //当年份等于5时,程序运行结束,汇报当前人数
                    Long po2 = po - po1;
                    System.out.println("程序运行结束,5年已模拟完成,当前人数:"+po);
                    System.out.println("预计5年内增长人数:"+po2);
                    System.out.println("本代码由CSDN@CTimet编写,感谢使用");
                    ++r;//使R=1,不继续运行下一次循环
                }
            }
        }
    }
}
/**
 * 本代码由CSDN@CTimet编写
 */

这次的代码运行结果为5年后美国增加了13900484人,应该是没错了,虽然你已经采纳了别人的回答,但我还是要把代码发出来供你学习,毕竟大家都在学习的路上嘛qwq