病毒传播模型模拟

import javax.swing.*;

import java.util.List;

import java.util.Random;

 

public class Main {

    public static void main(String[] args) {

        //定义一个有10个人口的Person对象数组people

        Person people[]=new Person[10];

        //通过new运算为每一个对象数组元素分配一个Person对象实体

        for(int i=0;i<people.length;i++){

            people[i]=new Person();

        }

        //调用CmdPrinter对象的print()持续打印每个对象的位置,模拟对象实体Person的随机移动

        CmdPrinter printer=new CmdPrinter();

        System.out.println("模拟程序开始");

        while(true)

            printer.print(people);

    }

 

}

 

 

public class CmdPrinter {

    //定义一个成员属性为20*20大小的char字符型二维数组作为Person对象的移动模拟空间
    char matrix[][]=new char[30][30];

    //自定义构造方法,初始化生存空间模拟二维数组每个元素为'O'
    public CmdPrinter(){
        for(int i=0;i<30;i++){
            for(int j=0;j<30;j++){
                matrix[i][j]='O';
            }
        }
    }

    //定义print()方法打印每一个Person对象在模拟空间中的位置,建议用∎符号代表该坐标有人,O符号代表该坐标没有人
    //注意print方法的参数为Person类型的数组
    void print(Person people[]){

        System.out.println("start the print:");

        //每次调用print方法时必须先将矩阵进行初始化
        for(int i=0;i<30;i++){
            for(int j=0;j<30;j++){
                matrix[i][j]='O';
            }
        }

        //遍历people数组,1、将其中每个元素对象的坐标值取出,在矩阵中做标记
        //2、调用该对象的action方法,以模拟下次打印people坐标时人口的随机移动
        for(int i=0;i<people.length;i++){
            matrix[people[i].x][people[i].y]='∎';
            people[i].action();
        }

        //最后遍历二维数组matrix,将其中所有元素打印出来(其中有人的坐标位置已在上一步中标记出来)
        for(int i=0;i<30;i++){
            for(int j=0;j<30;j++){
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }


    }


}

 

 

import java.util.Random;

 

public class Person {

    //Person对象中至少应该有如下三个属性:该对象的具体坐标,x的值和y的值,

    // 以及该对象的身体状况status,目前status的枚举值至少有健康和感染两种(建议用0和1表示)

    int x=0; //默认Person类型对象初始x坐标为0

    int y=0; //默认Person类型对象初始0坐标为0

    int status=0; //默认Person对象初始状态为0,健康

 

 

    //目前Person对象至少有一个普通方法action,其作用为将person对象从当前坐标随机移动到附近两个坐标单位长度区域内,

    //随机移动需要的随机值可参考之前按猜数字程序中的Random对象中的nextInt()方法

 

    public void action(){

        int dx= new Random().nextInt(5)-2; //只有将生产的随机数限制到从0开始的5个数(0、1、2、3、4),

        int dy= new Random().nextInt(5)-2; //然后将其值再减2,确保最终的移动范围保持在[-2,2]之间

 

        //最后将Person对象的坐标值移动之前需要判断是否超过二维数组边界,

        //如果超过,则该对象的对应坐标值只能在边界值上

        if(x+dx>=0&&x+dx<=29)

            x=x+dx;

        else if(x+dx<0)

            x=0;

        else

            x=29;

        if(y+dy>=0&&y+dy<=29)

            y=y+dy;

        else if(y+dy<0)

            y=0;

        else

            y=29;

 

    }

 

 

    //定义一个Person构造方法,不需要参数,要求将Person对象的坐标值(x,y)进行初始化,并将健康状况默认初始化为(健康)

 

    public Person(){

 

      x=2;

      y=2;

      status=0;//初始化对象相应参数

    }

 

 

}

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值