龟兔赛跑问题 龟兔赛跑:20米 //只要为了看到效果,所有距离缩短了 要求: 1.兔子每秒0.5米的速度,每跑2米休息10秒, 2.乌龟每秒跑0.1米,不休息 3.其中一个跑到终点后另一个不跑了! 程序设计思路: 1.创建一个Animal动物类,继承Thread,编写一个running抽象方法,重写run方法,把running方法在run方法里面调用。 2.创建Rabbit兔子类和Tortoise乌龟类,继承动物类 3.两个子类重写running方法 4.本题的第3个要求涉及到线程回调。需要在动物类创建一个回调接口,创建一个回调对象java
时间: 2024-03-25 13:40:13 浏览: 70
好的,这里是一个Java代码实现:
```java
public class AnimalRace {
public static void main(String[] args) {
Rabbit rabbit = new Rabbit();
Tortoise tortoise = new Tortoise();
// 设置回调对象
rabbit.setCallback(tortoise);
tortoise.setCallback(rabbit);
// 启动线程
rabbit.start();
tortoise.start();
}
}
// 动物类
abstract class Animal extends Thread {
protected int distance = 20; // 跑步距离
protected int restDistance = 2; // 休息距离
protected int restTime = 10000; // 休息时间
// 回调接口
public interface Callback {
void onWin();
}
protected Callback callback; // 回调对象
public void setCallback(Callback callback) {
this.callback = callback;
}
// 跑步方法
protected abstract void running();
@Override
public void run() {
super.run();
while (distance > 0) {
running();
}
}
// 休息方法
protected void rest() {
try {
Thread.sleep(restTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 通知回调对象
protected void notifyCallback() {
if (callback != null) {
callback.onWin();
}
}
}
// 兔子类
class Rabbit extends Animal {
private double speed = 0.5; // 跑步速度
private boolean isResting = false; // 是否正在休息
@Override
protected void running() {
if (isResting) { // 如果正在休息
rest();
isResting = false;
} else if (distance - restDistance <= 0) { // 如果距离小于等于休息距离
distance = 0;
System.out.println("兔子到达终点!");
notifyCallback();
} else {
distance -= restDistance; // 兔子跑两米
System.out.println("兔子跑了两米,距离终点还有" + distance + "米");
isResting = true; // 兔子开始休息
}
}
}
// 乌龟类
class Tortoise extends Animal {
private double speed = 0.1; // 跑步速度
@Override
protected void running() {
if (distance <= 0) { // 如果距离小于等于0
System.out.println("乌龟到达终点!");
notifyCallback();
} else {
distance--; // 乌龟向前爬一步
System.out.println("乌龟爬了一步,距离终点还有" + distance + "米");
}
}
}
```
这个程序定义了一个`AnimalRace`类,其中包含了一个`main`方法。该程序创建了兔子和乌龟两个子类,它们都继承了`Animal`动物类,并重写了`running`方法来实现不同的行动方式。在动物类中,我们定义了一个回调接口和一个回调对象,用于在某个动物到达终点时通知另一个动物停止比赛。在兔子类中,我们设置了兔子的速度和休息时间,并在`running`方法中实现了兔子跑两米休息十秒的逻辑。在乌龟类中,我们设置了乌龟的速度,并在`running`方法中实现了乌龟一步步向前爬的逻辑。最后,在`main`方法中,我们设置了兔子和乌龟之间的回调关系,并启动了它们的线程。
阅读全文