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;//初始化对象相应参数
}
}