Java学习之旅(二):生病的狗2(java例化)

废话不多说,直接上肝货,可运行。

代码简陋,逻辑关系可能还不是很严谨,欢迎交流。

 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 }
Class Owner
 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 }
Class Dog
1 public class Info {
2     public int treat = 0;//送医救治的病狗数量
3 }
Class Info
1 public class Tool {
2     String car = "一辆柯尼塞格";
3 }
Class Tool
 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 }
Class Test

可以改的变量有很多,有更好的代码表述的逻辑推理过程希望能给我留言,让我改正!

猜你喜欢

转载自www.cnblogs.com/Azir-s-soldier/p/11462739.html