创建一个多线程程序模拟两台抽奖机同时抽奖的情景。抽奖池用一个数组表示(int[] jiangjin = {0,0,0,0,0,0,0,0,0,0,10, 10, 10, 10, 10, 100, 100, 100,500, 500,1000};),创建两个抽奖箱(线程),设置线程名称分别为“1号抽奖箱”,“2号抽奖箱”分别进行抽奖,每0.1秒钟抽奖一次,每个抽奖箱抽奖5次,将抽奖结果在控制台输出。如下: 二号抽奖箱开出100元奖 一号抽奖箱:空奖,谢谢参与 二号抽奖箱:空奖,谢谢参与 一号抽奖箱:空奖,谢谢参与 一号抽奖箱开出10元奖 二号抽奖箱:空奖,谢谢参与 一号抽奖箱开出10元奖 二号抽奖箱开出800元奖 一号抽奖箱:空奖,谢谢参与 二号抽奖箱开出10元奖 一号抽奖箱抽奖结束 二号抽奖箱抽奖结束 提示:每张奖劵被开出后,就不能再次被开出了,可以考虑把抽出来这张从数组删除,或者设置一个标记。用Java程序编写
时间: 2024-03-05 22:54:44 浏览: 129
以下是代码实现:
```
public class ChouJiangThread extends Thread {
private static int[] jiangjin = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 100, 100, 100, 500, 500, 1000}; // 抽奖池
private static boolean[] used = new boolean[jiangjin.length]; // 标记数组,用于记录抽奖池中的奖劵是否已经被抽过
private int count = 5; // 抽奖次数
public void run() {
for (int i = 0; i < count; i++) {
int index = (int) (Math.random() * jiangjin.length); // 随机生成一个下标
while (used[index]) { // 如果这个奖劵已经被抽过,则重新生成下标
index = (int) (Math.random() * jiangjin.length);
}
used[index] = true; // 标记这个奖劵已经被抽过了
int prize = jiangjin[index]; // 获取这个下标对应的奖劵
String name = Thread.currentThread().getName(); // 获取当前线程的名称
if (prize == 0) {
System.out.println(name + ": 空奖,谢谢参与");
} else {
System.out.println(name + "开出" + prize + "元奖");
}
try {
Thread.sleep(100); // 暂停0.1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "抽奖结束");
}
}
public class Test {
public static void main(String[] args) {
ChouJiangThread thread1 = new ChouJiangThread();
thread1.setName("1号抽奖箱");
ChouJiangThread thread2 = new ChouJiangThread();
thread2.setName("2号抽奖箱");
thread1.start();
thread2.start();
}
}
```
在上述代码中,我们定义了一个抽奖线程类`ChouJiangThread`,继承自`Thread`类,并重写了`run()`方法,每隔0.1秒进行一次抽奖,每个抽奖箱抽奖5次,将抽奖结果在控制台输出。在抽奖过程中,我们通过一个标记数组`used`来记录每个奖劵是否已经被抽过了,避免重复抽奖。
在测试类`Test`中,我们创建了两个`ChouJiangThread`对象,并通过`setName()`方法为它们设置了不同的名称,并启动了线程。
最终运行程序,我们可以看到两个抽奖箱分别进行抽奖,每个抽奖箱抽奖5次,将抽奖结果在控制台输出。
阅读全文