java龟兔赛跑设计思路_JAVA程序设计(09)-----面对对象设计初级应用 龟兔赛跑

1.乌龟和兔子共有属性和方法 做成父类 避免重复代码

package com.lovo;

/**

* 类: 动物

* @author Abe

* 属性: 名字 步距 总距离 睡觉的日子

*/

public class Animal {

protected String name;

protected int step;

protected int distance;

protected int sleepDay;

/**

* 构造器

* @param name

*/

public Animal(String name) {

this.name = name;

}

public Animal(){

}

/**

* 方法:获取 名字 行走长度 休息的天数 设置总距离 设置休息天数

* @return

*/

public String getName() {

return name;

}

public int getStep() {

return step;

}

public int getDistance(){

return distance;

}

public int getSleepDay() {

return sleepDay;

}

public void setDistance(int dis) {

this.distance += dis;

}

public void setSleepDay(int slp) {

this.sleepDay += slp;

}

}

2.类:乌龟

package com.lovo;

/**

* 类 : 乌龟

* @author Abe

* 父类:Animal

* 属性:疲劳的日期

*/

public class Tortoise extends Animal {

private int encourageDay;

/**

* 构造器

* @param name

*/

public Tortoise(String name) {

super(name);

}

/**

* 方法: 走路,每次2~4米

*/

public void walk() {

if (encourageDay == 0 && sleepDay == 0) {

step = (int) (Math.random() * 3 + 2);

}

}

/**

* 方法:30%鼓励 ,之后3天每天可以走双倍的路程,但是之后的第4天只能休息。

*/

public void encourage() {

if (encourageDay == 0 && sleepDay == 0 && Math.random() >= 0.7) {

step = (int) (Math.random() * 3 + 2) * 2;

encourageDay = 3;

sleepDay = 1;

}

}

/**

* 方法: 调用、设置 激励天数

*

* @return

*/

public int getEncourageDay() {

return encourageDay;

}

public void setEncourageDay(int enc) {

this.encourageDay += enc;

}

/**

* 方法:每天的行动 1.没激励不睡觉 就看是否发动技能 没发动就普通移动 2.有激励就激励移动 没激励有睡觉就睡觉

* @return 每天活动的结果

*/

public String everyDay() {

if (this.getEncourageDay() == 0 && this.getSleepDay() == 0) {

this.encourage();

if (this.getEncourageDay() > 0) {

this.setDistance(this.getStep());

return this.getName() + "发动了技能《底力》,疯狂的向前跑出了" + this.getStep()+ "米!!";

} else {

this.walk();

this.setDistance(this.getStep());

return this.getName() + "跑了" + this.getStep() + "米!";

}

} else if (this.getEncourageDay() != 0) {

this.setDistance(this.getStep());

this.setEncourageDay(-1);

return this.getName() + "的《底力》持续中,它疯狂的向前跑出了" + this.getStep()+ "米!!";

} else {

this.setDistance(0);

this.setSleepDay(-1);

return this.getName() + "美美的睡了一觉~";

}

}

}

3.类:兔子

package com.lovo;

/**

* 类:兔子

* @author Abe

* 父类:Animal

*/

public class Rabbit extends Animal {

/**

* 构造器

*/

public Rabbit(String name) {

super(name);

}

/**

* 方法:跑步 每次可以跑1~16, 但是一次跑步超过6就要休息1天,超过11就要休息2天

*/

public void run() {

step = (int) (Math.random() * 16 + 1);

if (step >= 11) {

sleepDay = 2;

} else if (step >= 6) {

sleepDay = 1;

}

}

/**

* 方法:没睡觉就跑步

*/

public String everyDay(){

if(this.getSleepDay() == 0 ){

this.run();

this.setDistance(this.getStep());

if (this.getStep() >= 11) {

return this.getName() + "不可思议的跑出了" + this.getStep()

+ "米!!!~ 它累的不得不休息两天……";

}else if(this.getStep() >= 6){

return this.getName() + "惊人的跑出了" + this.getStep()

+ "米!!~ 它累的不得不休息一天……";

}else{

return this.getName() + "跑了" + this.getStep()

+ "米!";

}

}else{

this.setDistance(0);

this.setSleepDay(-1);

return this.getName() + "懒洋洋的睡了一觉~~";

}

}

}

4.开始赛跑吧~~:)

package com.lovo;

/**

* 开始比赛跑步 先跑完100米获胜

* @author Abe

*/

public class Running {

public static void main(String[] args) {

Tortoise tor = new Tortoise("小乌龟");

Rabbit rab = new Rabbit("小兔子");

for(int distance = 100 , day = 1 ;tor.getDistance() < 100 && rab.getDistance() < 100 ;day++ ){

System.out.println("-----------第" + day + "天-----------");

System.out.println(tor.everyDay());

System.out.println(rab.everyDay());

if(tor.getDistance() >= 100 && rab.getDistance() >= 100){

System.out.println("怎么回事?!" + tor.getName() + rab.getName() + "同时冲过了终点!! 居然是平局");

}else if(tor.getDistance() >= 100){

System.out.println(tor.getName() +"取得了胜利!");

}else if(rab.getDistance() >= 100){

System.out.println(rab.getName() +"取得了胜利!");

}else{

System.out.println(tor.getName() + "一共跑了"+ tor.getDistance() + "米!");

System.out.println(rab.getName() + "一共跑了"+ rab.getDistance() + "米!");

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16年国庆假期期间兼职所悟

2016年9月25日&#xff0c;学校放假了&#xff01;&#xff01;&#xff01; 学校放假11天&#xff0c;10月7号才开学&#xff0c;除了晚上上个夜班之外别的时间都在闲着&#xff0c;这么大的自己感觉闲着真不是滋味&#xff0c;于是开始疯狂的在58上找工作&#xff0c;心里想…

python flask项目过程_Python 开发过程遇到的问题

另一方面&#xff0c;也是因为时间原因&#xff0c;没有事先系统了解 python 的具体内容&#xff0c;所以开发过程中基本都是拿 java 的东西往 python 里面套。比如&#xff1a;某个功能用 java 的 ArrayList 可以解决&#xff0c;那 python 中有没有类似的东西呢&#xff1f;j…

Java 中的双重检查(Double-Check)

转载自 Java 中的双重检查&#xff08;Double-Check&#xff09; 在 Effecitve Java 一书的第 48 条中提到了双重检查模式&#xff0c;并指出这种模式在 Java 中通常并不适用。该模式的结构如下所示&#xff1a; public Resource getResource() { if (resource null) { …

使用 Autofac 进行依赖注入

先说下为什么翻译这篇文章&#xff0c;既定的方向是架构&#xff0c;然后为了学习架构就去学习一些架构模式、设计思想。 突然有一天发现依赖注入这种技能。为了使得架构可测试、易维护、可扩展&#xff0c;需要架构设计为松耦合类型&#xff0c;简单的说也就是解耦。为了解耦前…

组合的示例代码 java_java实现Composite组合模式的实例代码

//20210121写在前面&#xff1a;刚期末考试完&#xff0c;考了面向对象&#xff0c;里边儿有23个设计模式&#xff0c;我寻思着考完挨个儿实现一下&#xff0c;本文实现组合模式组合模式核心思想类似文件夹的概念&#xff0c;构件树形结构&#xff0c;树形有叶子结点和文件夹结…

Java中的ThreadPoolExecutor类

转载自 Java中的ThreadPoolExecutor类在前面的文章中&#xff0c;我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&…

webpack 前端构建

一、建立简单的项目目录 1、创建 manager 根目录(作为项目根目录)2、执行 npm init&#xff0c;在根目录manager下自动生成 package.json文件3、npm install webpack --save-dev&#xff0c;在项目中安装 webpack npm包4、在根目录下 创建 webpack.config.js&#xff0c;所有的…

简析 .NET Core 构成体系

简析 .NET Core 构成体系Roslyn 编译器RyuJIT 编译器CoreCLR & CoreRTCoreFX(.NET Core Libraries).NET Core 代码开发、部署、运行过程总结 前文介绍了.NET Core 在整个.NET 平台所处的地位&#xff0c;以及与.NET Framework的关系(原文链接)&#xff0c;本文将详细介绍.N…

判断一个男人穷还是富,只看这几点!

转载至&#xff1a; 来源&#xff1a;甜蜜爸妈手记&#xff08;wxtm01&#xff09; 作者&#xff1a;甜甜妈 创业君 导读 千主意万主意&#xff0c;如果不行动&#xff0c;永远就只是个想法而已。好想法要配得上行动才行。 看看他的爱好一个有事业心男人&#xff0c;绝对不…

php制作留言板的题_PHP实现留言板功能实例代码

本文实例为大家分享了php留言板的实现思路&#xff0c;供大家参考&#xff0c;具体内容如下&#xff1a;1.创建一个存放留言信息的文件名2.获取表单中的数据给一个变量3.判断文件的时候存在4.对文件执行写的操作&#xff0c;在这之前&#xff0c;注意打开文件的时候&#xff0c…

Java线程池,从使用到原理

转载自 Java线程池&#xff0c;从使用到原理线程池的技术背景 在面向对象编程中&#xff0c;创建和销毁对象是很费时间的&#xff0c;因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此&#xff0c;虚拟机将试图跟踪每一个对象&#xff0c;以便能够在对象销毁…

聊聊HTTPS和SSL/TLS协议

要说清楚 HTTPS 协议的实现原理&#xff0c;至少需要如下几个背景知识。1. 大致了解几个基本术语&#xff08;HTTPS、SSL、TLS&#xff09;的含义2. 大致了解 HTTP 和 TCP 的关系&#xff08;尤其是“短连接”VS“长连接”&#xff09;3. 大致了解加密算法的概念&#xff08;尤…

php事件编程,PHP相应button中onclick事件的案例分析

PHP相应button中onclick事件的案例分析发布时间&#xff1a;2020-11-10 11:28:31来源&#xff1a;亿速云阅读&#xff1a;71作者&#xff1a;小新小编给大家分享一下PHP相应button中onclick事件的案例分析&#xff0c;相信大部分人都还不怎么了解&#xff0c;因此分享这篇文章给…

Java 中Timer和TimerTask 定时器和定时任务使用的例子

转载自 Java 中Timer和TimerTask 定时器和定时任务使用的例子 这两个类使用起来非常方便&#xff0c;可以完成我们对定时器的绝大多数需求 Timer类是用来执行任务的类&#xff0c;它接受一个TimerTask做参数 Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执…

复制一个5G文件只需要两秒,全网最牛方法!

文章来至 微信公众号&#xff1a;中国黑客联盟 很多时候我们在复制比较大的文件的时候是一件多么痛苦的事情&#xff0c;因为少的几分钟多则十几分钟&#xff0c;这样的等待是我们无法容忍的&#xff01;那么今天我们就教大家如何快速的复制电脑大文件&#xff01; 首先我…

.NET Core也可以使用MongoDB了

可能是由于.NET Core还不是正式版的缘故吧&#xff0c;MongoDB的官方Driver(http://mongodb.github.io/mongo-csharp-driver/)一直不支持.NET Core&#xff0c;这给想在.NET Core上尝试MongoDB带来了不便&#xff0c;本人就是其中之一 &#xff1a;&#xff09; 于是Fork了官方…

Java多线程系列--“JUC线程池”06之 Callable和Future

转载自 Java多线程系列--“JUC线程池”06之 Callable和FutureCallable 和 Future 简介Callable 和 Future 是比较有趣的一对组合。当我们需要获取线程的执行结果时&#xff0c;就需要用到它们。Callable用于产生结果&#xff0c;Future用于获取结果。 1. Callable Callable 是…

php array分组,php数组分组简单例子

在php网站开发过程中有时候需要把结果集进行分组&#xff0c;使用php的内置函数array_chunk就可以实现 代码如下复制代码$teamsarray(1,2,3,4,5,6,7,8,9);$teamsarray_chunk($teams,2);print_r($teams);/*Array([0] > Array([0] > 1[1] > 2)[1] > Array([0] > 3…

SuperSocket源码解析之开篇

一 简介 官方介绍&#xff1a;SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作&#xff0c;但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件&#…

Java守护线程概述

转载自 Java守护线程概述Java的线程分为两种&#xff1a;User Thread(用户线程)、DaemonThread(守护线程)。 只要当前JVM实例中尚存任何一个非守护线程没有结束&#xff0c;守护线程就全部工作&#xff1b;只有当最后一个非守护线程结束是&#xff0c;守护线程随着JVM一同结束…