场景如下。兔子、乌龟和公鸡进行赛跑,其中兔子每秒0.5米的速度,每跑2米休息10秒;乌龟每秒跑0.1米,不休息;公鸡每秒0.8米,每跑3秒需要吃一条虫子,耗时0.6秒。 当其中一个跑到终点后其他动物个不跑了;比赛道路长20米。试用多模拟该比赛过程
animal .java
package com.test44;
public class animal extends Thread{
protected double speed; //速度
public static double length=20; //道路总长
private String animalName;
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
this.speed = speed;
}
public static double getLength() {
return length;
}
public static void setLength(double length) {
animal.length = length;
}
public String getAnimalName() {
return animalName;
}
public void setAnimalName(String animalName) {
this.animalName = animalName;
}
public animal(String animalName) {
super(animalName);
}
}
Chick .java
package com.test44;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Chick extends animal {
private Rabbit rabbit;
private Wugui wugui;
private Integer time=0;//用来计时
public Rabbit getRabbit() {
return rabbit;
}
public void setRabbit(Rabbit rabbit) {
this.rabbit = rabbit;
}
public Wugui getWugui() {
return wugui;
}
public void setWugui(Wugui wugui) {
this.wugui = wugui;
}
public Chick(String animalName,double speed) {
super(animalName);
this.speed=speed;
}
public void run() {
for (double i = 0; i <this.length ; i+=speed) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName()+"跑了"+(new BigDecimal(i+this.speed)).setScale(2, RoundingMode.HALF_UP)+"米");
time++;//跑完一秒计时加一
if(time%3==0&&time!=0){
try {
System.out.println(this.getName()+"正在吃虫子,耗时0.6s");
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(this.getName()+"是冠军");
//率先跑完循环的就是冠军
if(rabbit.isAlive()){
rabbit.stop();;
}
if(wugui.isAlive()){
wugui.stop();
}
}
}
Rabbit .java
package com.test44;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Rabbit extends animal {
private Chick chick;
private Wugui wugui;
public Chick getChick() {
return chick;
}
public void setChick(Chick chick) {
this.chick = chick;
}
public Wugui getWugui() {
return wugui;
}
public void setWugui(Wugui wugui) {
this.wugui = wugui;
}
public Rabbit(String animalName,double speed) {
super(animalName);
this.speed=speed;
}
@Override
public void run() {
for (double i = 0; i <this.length ; i+=speed) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName()+"跑了"+(new BigDecimal(i+this.speed)).setScale(2, RoundingMode.HALF_UP)+"米");
if(i!=0&&(i+this.speed)%2==0){
try {
System.out.println(this.getName()+"正在睡觉,需要10s");
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(this.getName()+"是冠军");
//率先跑完循环的就是冠军
if(chick.isAlive()){
chick.stop();;
}
if(wugui.isAlive()){
wugui.stop();
}
}
}
Wugui .java
package com.test44;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Wugui extends animal{
private Rabbit rabbit;
private Chick chick;
public Wugui(String animalName,double speed) {
super(animalName);
this.speed=speed;
}
public Rabbit getRabbit() {
return rabbit;
}
public void setRabbit(Rabbit rabbit) {
this.rabbit = rabbit;
}
public Chick getChick() {
return chick;
}
public void setChick(Chick chick) {
this.chick = chick;
}
public void run() {
for (double i = 0; i <this.length ; i+=speed) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName()+"跑了"+(new BigDecimal(i+this.speed)).setScale(2, RoundingMode.HALF_UP)+"米");
}
System.out.println(this.getName()+"是冠军");
//率先跑完循环的就是冠军
if(chick.isAlive()){
chick.stop();;
}
if(rabbit.isAlive()){
rabbit.stop();
}
}
}
Test .java
package com.test44;
public class Test {
public static void main(String[] args) {
Wugui wugui = new Wugui("乌龟", 0.1);
Rabbit rabbit = new Rabbit("兔子", 0.5);
Chick chick = new Chick("小鸡", 0.8);
wugui.setChick(chick);
wugui.setRabbit(rabbit);
rabbit.setChick(chick);
rabbit.setWugui(wugui);
chick.setRabbit(rabbit);
chick.setWugui(wugui);
wugui.start();
rabbit.start();
chick.start();
}
}