
正文
Java学习之旅(二):生病的狗2(java例化)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
废话不多说,直接上肝货,可运行。
代码简陋,逻辑关系可能还不是很严谨,欢迎交流。
public class Owner {
//属性部分
//狗主人肯定有一条狗,这条狗可以被别的主人检查,所以设置为public
//但是这条狗的生病状态,狗主人看不到
public Dog dog; //因为有很多主人,所以单个主人应该有一个自己的编号,
public int ownerCode; //发现其他狗里生病的狗的数量,因为信息不能共享,所以这个属性是私有的
private int sickDogRecord = 0; //自己的狗是否生病,生病为true,没有生病为false
public boolean dogIsSick; //方法部分
//狗主人可以检查其他狗主人的狗
public void checkDog(Dog otherOwnerDog){
//如果这条狗有病,sickDog++;
if(otherOwnerDog.sick){
this.sickDogRecord++;
}
}
//狗主人判断自己的狗是否生病
public void IsSick(int day, Info info){
//第一天,如果record为0,那么自己的狗肯定是病狗,执行送医的方法,全局变量treat++,结束循环
//如果record不是0,那么自己的狗有可能不是病狗,进入第二天的循环
//第二天,如果record为1;那么第一遍循环之后,treat应该为1,此时判断全局变量treat是否为0,
//如果是0,则自己的狗是病狗,执行送医,treat++,结束循环
//如果record不是1,那么自己的狗有可能不是病狗,进入下一轮循环
//第三天,如果record为2;那么第二遍循环之后,treat应该为2,此时判断全局变量treat是否为0,
//如果是0,则自己的狗是病狗,执行送医,treat++,结束循环
//如果record不是2,那么自己的狗有可能不是病狗,进入下一轮循环
//依次类推...
if(sickDogRecord==day-1){
dogIsSick = true;
sendDogToHospital(dog);
info.treat++;
}
//return dogIsSick;
}
//杀狗
public void sendDogToHospital(Dog myselfDog){
//调用狗的被送医方法
//临时找来一个工具将狗送医
Tool tool= new Tool();
myselfDog.beSendHospital(tool);//传入一个送医的工具对象
this.dog = null;
} public Owner(){ }
//构造方法重载
public Owner(Dog dog, int code, boolean sick){
this.dog = dog;
this.ownerCode = code;
this.dogIsSick = sick;
}
}
Class Owner
public class Dog {
//属性部分
//疾病状态,有没有生病,生病了是true,没有生病是false
boolean sick;
//多少主人,就有多少条狗,狗也有编号
public int dogCode;
//方法部分
//狗被送医
public void beSendHospital(){
System.out.println(this.dogCode+"号狗被送去医院。");
}
//狗被送医 重载
public void beSendHospital(Tool tool){
System.out.println(this.dogCode+"号狗被主人用"+tool.car+"送去医院。");
}
public Dog(){ }
//构造函数重载
public Dog(boolean sick, int code){
this.sick = sick;
dogCode = code;
}
}
Class Dog
public class Info {
public int treat = 0;//送医救治的病狗数量
}
Class Info
public class Tool {
String car = "一辆柯尼塞格";
}
Class Tool
public class Test{
public static void main(String[] args){
//构建一个存储信息的对象
Info info = new Info(); //构建一个owner的数组,内含50个元素
Owner owner[] = new Owner[50];
//对50个owner初始化,并随机生成>=1且<=50的随机病狗数
//(暂时先指定为3只病狗)
int assum = 5;
for(int i = 0; i < owner.length; i++){
if(i<assum){//构建3只病狗
owner[i] = new Owner(new Dog(true, i+1), i+1, false);
continue;
}
owner[i] = new Owner(new Dog(false, i+1), i+1, false);
} //让每个owner遍历其他owner获取观察的病狗数量
for (int i = 0; i < owner.length; i++) {
for (int j = 0; j < owner.length; j++) {
if(i==j){
continue;
}
owner[i].checkDog(owner[j].dog);
}
} //进入推理循环
//设置天数
int day = 1;
while(info.treat==0){//如果还没有狗被治疗
//每个owner做一次推理
for (int i = 0; i < owner.length; i++) {
owner[i].IsSick(day, info);
}
//然后判断treat是否变化,如果变化了,就说明有狗被送医,循环结束
//如果treat还是0,说明还没有狗被送医,继续循环
if(info.treat!=0){
break;
}
System.out.println("在第"+day+"天有"+info.treat+"只狗被送医治疗");
//继续循环,天数加1
day++;
}
//最后打印结果
System.out.println("在第"+day+"天有"+info.treat+"只狗被送医治疗");
}
}
Class Test

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






