废话不多说,直接上肝货,可运行。
代码简陋,逻辑关系可能还不是很严谨,欢迎交流。
1 public class Owner { 2 //属性部分 3 //狗主人肯定有一条狗,这条狗可以被别的主人检查,所以设置为public 4 //但是这条狗的生病状态,狗主人看不到 5 public Dog dog; 6 7 //因为有很多主人,所以单个主人应该有一个自己的编号, 8 public int ownerCode; 9 10 //发现其他狗里生病的狗的数量,因为信息不能共享,所以这个属性是私有的 11 private int sickDogRecord = 0; 12 13 //自己的狗是否生病,生病为true,没有生病为false 14 public boolean dogIsSick; 15 16 //方法部分 17 //狗主人可以检查其他狗主人的狗 18 public void checkDog(Dog otherOwnerDog){ 19 //如果这条狗有病,sickDog++; 20 if(otherOwnerDog.sick){ 21 this.sickDogRecord++; 22 } 23 } 24 //狗主人判断自己的狗是否生病 25 public void IsSick(int day, Info info){ 26 //第一天,如果record为0,那么自己的狗肯定是病狗,执行送医的方法,全局变量treat++,结束循环 27 //如果record不是0,那么自己的狗有可能不是病狗,进入第二天的循环 28 //第二天,如果record为1;那么第一遍循环之后,treat应该为1,此时判断全局变量treat是否为0, 29 //如果是0,则自己的狗是病狗,执行送医,treat++,结束循环 30 //如果record不是1,那么自己的狗有可能不是病狗,进入下一轮循环 31 //第三天,如果record为2;那么第二遍循环之后,treat应该为2,此时判断全局变量treat是否为0, 32 //如果是0,则自己的狗是病狗,执行送医,treat++,结束循环 33 //如果record不是2,那么自己的狗有可能不是病狗,进入下一轮循环 34 //依次类推... 35 if(sickDogRecord==day-1){ 36 dogIsSick = true; 37 sendDogToHospital(dog); 38 info.treat++; 39 } 40 //return dogIsSick; 41 } 42 //杀狗 43 public void sendDogToHospital(Dog myselfDog){ 44 //调用狗的被送医方法 45 //临时找来一个工具将狗送医 46 Tool tool= new Tool(); 47 myselfDog.beSendHospital(tool);//传入一个送医的工具对象 48 this.dog = null; 49 } 50 51 public Owner(){ 52 53 } 54 //构造方法重载 55 public Owner(Dog dog, int code, boolean sick){ 56 this.dog = dog; 57 this.ownerCode = code; 58 this.dogIsSick = sick; 59 } 60 }
1 public class Dog { 2 //属性部分 3 //疾病状态,有没有生病,生病了是true,没有生病是false 4 boolean sick; 5 //多少主人,就有多少条狗,狗也有编号 6 public int dogCode; 7 //方法部分 8 //狗被送医 9 public void beSendHospital(){ 10 System.out.println(this.dogCode+"号狗被送去医院。"); 11 } 12 //狗被送医 重载 13 public void beSendHospital(Tool tool){ 14 System.out.println(this.dogCode+"号狗被主人用"+tool.car+"送去医院。"); 15 } 16 public Dog(){ 17 18 } 19 //构造函数重载 20 public Dog(boolean sick, int code){ 21 this.sick = sick; 22 dogCode = code; 23 } 24 }
1 public class Info { 2 public int treat = 0;//送医救治的病狗数量 3 }
1 public class Tool { 2 String car = "一辆柯尼塞格"; 3 }
1 public class Test{ 2 public static void main(String[] args){ 3 //构建一个存储信息的对象 4 Info info = new Info(); 5 6 //构建一个owner的数组,内含50个元素 7 Owner owner[] = new Owner[50]; 8 //对50个owner初始化,并随机生成>=1且<=50的随机病狗数 9 //(暂时先指定为3只病狗) 10 int assum = 5; 11 for(int i = 0; i < owner.length; i++){ 12 if(i<assum){//构建3只病狗 13 owner[i] = new Owner(new Dog(true, i+1), i+1, false); 14 continue; 15 } 16 owner[i] = new Owner(new Dog(false, i+1), i+1, false); 17 } 18 19 //让每个owner遍历其他owner获取观察的病狗数量 20 for (int i = 0; i < owner.length; i++) { 21 for (int j = 0; j < owner.length; j++) { 22 if(i==j){ 23 continue; 24 } 25 owner[i].checkDog(owner[j].dog); 26 } 27 } 28 29 //进入推理循环 30 //设置天数 31 int day = 1; 32 while(info.treat==0){//如果还没有狗被治疗 33 //每个owner做一次推理 34 for (int i = 0; i < owner.length; i++) { 35 owner[i].IsSick(day, info); 36 } 37 //然后判断treat是否变化,如果变化了,就说明有狗被送医,循环结束 38 //如果treat还是0,说明还没有狗被送医,继续循环 39 if(info.treat!=0){ 40 break; 41 } 42 System.out.println("在第"+day+"天有"+info.treat+"只狗被送医治疗"); 43 //继续循环,天数加1 44 day++; 45 } 46 //最后打印结果 47 System.out.println("在第"+day+"天有"+info.treat+"只狗被送医治疗"); 48 } 49 }
可以改的变量有很多,有更好的代码表述的逻辑推理过程希望能给我留言,让我改正!