编程百米赛跑怎么做的

时间:2025-03-05 11:25:52 明星趣事

模拟百米赛跑的编程实现可以采用多种方法,包括多线程编程、事件驱动编程等。下面我将介绍两种常见的实现方法:

方法一:使用多线程和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 results = new ArrayList<>();

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`来控制多线程的同步,适用于需要精确控制运动员