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
可以改的变量有很多,有更好的代码表述的逻辑推理过程希望能给我留言,让我改正!
Java学习之旅(二):生病的狗2(java例化)的更多相关文章
- 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...
- 【Java学习笔记之二十四】对Java多态性的一点理解
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- Java学习笔记(二十四):单例设计模式singleton
为什么要使用singleton设计模式? 假设设计了一个操作数组的工具类(Tools),里面有一个锤子的方法(Hammer),如果不使用singleton设计模式,每次想调用Hammer方法都需要ne ...
- Java学习-028-JSON 之二 -- 数据读取
JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...
- Java学习之旅开篇:运行机制及环境搭建
在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- Java学习之旅(二):生病的狗1(逻辑推导)
前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- Java学习笔记(二二)——Java HashMap
[前面的话] 早上起来好瞌睡哈,最近要注意一样作息状态. HashMap好好学习一下. [定义] Hashmap:是一个散列表,它存储的内容是键值对(key——value)映射.允许nul ...
随机推荐
- LeetCode 702. Search in a Sorted Array of Unknown Size
原题链接在这里:https://leetcode.com/problems/search-in-a-sorted-array-of-unknown-size/ 题目: Given an integer ...
- random库
伪随机数的原因: random库中函数主要用于产生各种分布的伪随机数序列.random库中的随机函数是按照一定算法模拟产生的,其概率是确定的.可见的,所以被称为伪随机数.而真正意义上的随机数是按照实验 ...
- centos 部署的时候安装不上Mariadb,缺少依赖文件
并不存在这个sock文件 使用systemctl status mariadb.service 查看报错信息 提示libsystemd.so.0文件不存在, 安装systemd-libs包,解决问题, ...
- BZOJ2151/洛谷P1792 题解
若想要深入学习反悔贪心,传送门. Description: 有 \(n\) 个位置,每个位置有一个价值.有 \(m\) 个树苗,将这些树苗种在这些位置上,相邻位置不能都种.求可以得到的最大值或无解信息 ...
- HTML引入外部JS文件
<!--引入外部文件的方式--> <script type="text/javascript" src="attack.js">< ...
- linux 下查看redis是否启动
make make PREFIX=/usr/local/redis install mkdir /etc/redis/ cp redis.conf /etc/redis/ 打开redis.conf文件 ...
- Linux平台Boost 1.6.7的编译方法
boost库下载地址:https://dl.bintray.com/boostorg/release/ 编译: 1. 获得bjam (1) # cd /usr/src/boost_1_67_0 (2) ...
- 【vue】解决npm run build失败问题
问题说明: 首先,npm run build失败的原因大部分都是因为webpack的子库和webpack的版本号不对应的问题
- NPU TPU
https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
- linux压缩 zip和unzip
.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 .把/home目录下面的mydata.zip解压到myda ...