后台每5分钟生成一个3位数,在网页中输入3个数字和姓名,每5分钟统计所以输入的数字,然后开奖,输出中奖的姓名,用java生成代码
时间: 2024-05-07 19:18:51 浏览: 53
java 后台输出的 抽奖系统
以下是一个简单的 Java 代码实现:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class Lottery {
private static final int INTERVAL = 5 * 60 * 1000; // 5 minutes
private static int lotteryNumber;
private static List<String> participants = new ArrayList<>();
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new LotteryTask(), 0, INTERVAL);
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Enter your name and a 3-digit number separated by a space (e.g. John 123): ");
String input = scanner.nextLine();
String[] tokens = input.split(" ");
if (tokens.length != 2 || !tokens[1].matches("\\d{3}")) {
System.out.println("Invalid input, please try again.");
} else {
String name = tokens[0];
String number = tokens[1];
synchronized (participants) {
participants.add(name + " " + number);
}
}
}
}
private static class LotteryTask extends TimerTask {
@Override
public void run() {
synchronized (participants) {
if (participants.isEmpty()) {
System.out.println("No participants, skipping lottery.");
return;
}
lotteryNumber = (int) (Math.random() * 1000);
System.out.println("Lottery number: " + lotteryNumber);
for (String participant : participants) {
String[] tokens = participant.split(" ");
String name = tokens[0];
String number = tokens[1];
if (number.equals(String.format("%03d", lotteryNumber))) {
System.out.println("Congratulations, " + name + ", you won!");
}
}
participants.clear();
}
}
}
}
```
这个程序使用了 Timer 和 TimerTask 来实现定时任务,每隔 5 分钟就会执行一次 LotteryTask 中的代码,即开奖过程。在主函数中,使用 Scanner 对象获取用户输入,将参与者的姓名和数字存储在一个 List 中。在开奖过程中,使用 synchronized 关键字确保多个线程不会同时修改 participants 集合,并对每个参与者的数字进行匹配,输出中奖者的姓名。
阅读全文