模拟百米赛跑的编程实现可以采用多种方法,包括多线程编程、事件驱动编程等。下面我将介绍两种常见的实现方法:
方法一:使用多线程和CountDownLatch
我们可以使用Java中的`CountDownLatch`来控制运动员的起跑和结束。以下是一个简单的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
public class百米赛跑 {
private static final int SPORTSMAN_COUNT = 10;
private static final Random random = new Random();
private static CountDownLatch readyLatch = new CountDownLatch(SPORTSMAN_COUNT);
private static CountDownLatch startLatch = new CountDownLatch(1);
private static List
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < SPORTSMAN_COUNT; i++) {
new Thread(new Runner(i)).start();
}
// 模拟裁判发令
System.out.println("裁判准备发令...");
Thread.sleep(random.nextInt(1000));
startLatch.countDown(); // 发令
// 等待所有运动员到达终点
startLatch.await();
System.out.println("所有运动员到达终点,比赛结束。");
// 输出成绩排名
results.sort((a, b) -> b - a);
System.out.println("成绩排名:");
for (int i = 0; i < SPORTSMAN_COUNT; i++) {
System.out.println((i + 1) + ". " + results.get(i) + "秒");
}
}
static class Runner implements Runnable {
private int id;
public Runner(int id) {
this.id = id;
}
@Override
public void run() {
try {
readyLatch.await(); // 等待裁判发令
startLatch.await(); // 等待发令
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime < 1000) {
// 模拟跑步过程
Thread.sleep(random.nextInt(100));
}
long endTime = System.currentTimeMillis();
int time = (int) (endTime - startTime);
results.add(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
方法二:使用键盘输入模拟跑步
我们可以通过键盘输入来模拟运动员的跑步过程。以下是一个简单的示例代码:
```java
import java.util.Scanner;
public class百米赛跑模拟 {
private static final int DISTANCE = 100;
private static final int STEP_SIZE = 2;
private static int currentPosition = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入运动员数量(最多10人):");
int runnerCount = scanner.nextInt();
if (runnerCount > 10) {
System.out.println("运动员数量不能超过10人。");
return;
}
for (int i = 0; i < runnerCount; i++) {
System.out.println("请输入第" + (i + 1) + "名运动员的名字:");
String name = scanner.next();
System.out.println("请输入第" + (i + 1) + "名运动员的成绩(秒):");
int time = scanner.nextInt();
if (time < 0 || time > DISTANCE / STEP_SIZE) {
System.out.println("成绩必须在0到" + (DISTANCE / STEP_SIZE) + "秒之间。");
i--; // 重新输入
continue;
}
System.out.println(name + "的成绩是:" + time + "秒");
}
System.out.println("比赛结束,成绩最好的运动员是:" + results.get(0) + "秒");
}
}
```
总结
以上两种方法分别通过多线程和键盘输入模拟了百米赛跑的过程。第一种方法利用`CountDownLatch`来控制多线程的同步,适用于需要精确控制运动员