话不多说,直接上代码。
题目:
要求跑步的距离相同,兔子的速度是乌龟的5倍,乌龟不会偷懒, 兔子偷懒的概率是80%
下面是用随机数来实现概率的(引用Random类),从四个数中选定一个,选到指定的一个就让兔子跑,这样就可以实现兔子偷懒的概率是百分之80了。
因为每次循环都花1秒钟,所以用sleep做。
import java.util.Random;
public class TortoiseHare {
public static void main(String[] args) {
//TODO 使用给定的AnimalRunner类模拟龟兔赛跑,要求跑步的距离相同,兔子的速度是乌龟的5倍,乌龟不会偷懒,
// 兔子偷懒的概率是80%
float distance = 2f;
AnimalRunner tortoise = new AnimalRunner(distance, 0.1f, 0f, "乌龟");
AnimalRunner hare = new AnimalRunner(distance, 0.5f, 0.8f, "兔子");
tortoise.start();
hare.start();
}
}
class AnimalRunner extends Thread {
final private float distance;
final private float speed;
final private float probability;
/**
* @param distance 跑步距离(米)
* @param speed 每秒跑多少米
* @param probability 休息而不是跑步(偷懒)的概率
* @param name 动物的名字
*/
public AnimalRunner(float distance, float speed, float probability, String name) {
super(name);
this.distance = distance;
this.speed = speed;
this.probability = probability;
}
@Override
public void run() {
float sum=distance;
long timeMillis = System.currentTimeMillis();
//TODO 在这里循环,从distance中按概率减去每秒能跑的距离。还要记一下整个的执行时间,最后要输出花了多少时间跑完。
while(true){
if (Thread.currentThread().getName()=="兔子"){
Random random = new Random();
int x=random.nextInt(4);
if (x==0){
sum-=speed;
}
}
else sum-=speed;
// 如果距离大于0就是还要睡眠
if (sum > 0f) {
try {
System.out.println(this.getName() + "-剩余: " + (String.format("%.2f 米",sum)));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else{
long timeMillis1 = System.currentTimeMillis();
System.out.printf("%s用%d秒跑完了%.0f米.\n", this.getName() , (timeMillis1-timeMillis)/1000, distance);
break;
}
}
}
}