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

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

 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

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

Java学习之旅(二):生病的狗2(java例化)的更多相关文章

  1. 【Java学习笔记之二十一】抽象类在Java继承中的用法小结

    一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...

  2. 【Java学习笔记之二十四】对Java多态性的一点理解

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  3. Java学习笔记(二十四):单例设计模式singleton

    为什么要使用singleton设计模式? 假设设计了一个操作数组的工具类(Tools),里面有一个锤子的方法(Hammer),如果不使用singleton设计模式,每次想调用Hammer方法都需要ne ...

  4. Java学习-028-JSON 之二 -- 数据读取

    JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...

  5. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...

  6. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  7. Java学习之旅(二):生病的狗1(逻辑推导)

    前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...

  8. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  9. Java学习笔记(二二)——Java HashMap

    [前面的话] 早上起来好瞌睡哈,最近要注意一样作息状态.       HashMap好好学习一下. [定义] Hashmap:是一个散列表,它存储的内容是键值对(key——value)映射.允许nul ...

随机推荐

  1. Boring counting HDU - 3518 (后缀数组)

    Boring counting \[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \] 题意 给出一个字符串,求出其中出现两次及以上的子串个数,要 ...

  2. leetcode 数据库练习 - 1205 每月交易I和II

    每月交易(一) Table: Transactions +---------------+---------+| Column Name | Type |+---------------+------ ...

  3. JS的ES6扩展

    1.字符串扩展 1. includes(str) : 判断是否包含指定的字符串 2. startsWith(str) : 判断是否以指定字符串开头 3. endsWith(str) : 判断是否以指定 ...

  4. cf1175 D\E

    链接 成功带wxy掉分..全程0输出 D E D 题意 把序列分成连续k段,f(i)表示i这个在第几段 \(\sum\limits_{i=1}^{n}a_i*f(i)\)最大 思路 想象成从k层积木依 ...

  5. 关于windows10用c++部署libtorch过程中遇到的一些问题

    libtorch1.0 vs2017 CMake3.14 windows10 无cuda 用c++调用pytorch模型官网上面有详细教程,也有很多博客,可以参考以下链接:https://blog.c ...

  6. 方法型混淆js代码

    const fs = require('fs'); const acorn = require('acorn'); const walk = require("acorn-walk" ...

  7. 【MonkeyRunner】[技术博客]用python编写脚本查看设备信息

    [MonkeyRunner]用python编写脚本查看设备信息 原以为是个简单的操作,在实践的时候发现了一些问题. python脚本 test.py: from com.android.monkeyr ...

  8. supervisor更改某项目配置后 需要重新启动才有效

    在linux服务器上部署了node项目,使用supervisor进行管理,supervisor是个好工具,具体介绍见这里about supervisor 梗概了该项目对的某些配置后,重新启动项目,发现 ...

  9. DNS域名解析失败 和 何时会查询下一个nameserver

    阿里DNS:域名解析失败的那些事:https://zhuanlan.zhihu.com/p/40659713 只有第一个nameserver响应超时,才会请求下一个nameserver. 收到 NOD ...

  10. Django实现自动发布(3发布-升级和回退)

    发布实际上就是将服务的某个版本和一台主机关联,我用一张表(MicroServiceInstance)记录了主机id.服务id.版本id,目前一台主机只能部署一个版本,所以主机id和服务id要做联合索引 ...