欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java——有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}

程序员文章站 2022-03-04 18:40:28
...

有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从arr数组中获取奖项元素并打印在控制台上,格式如下:
抽奖箱1 又产生了一个 10 元大奖
抽奖箱2 又产生了一个 100 元大奖

实现代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RewardPool {
	public static void main(String[] args) {
		Reward reward = new Reward();
		new Thread(reward,"抽奖1").start();//启动线程
		new Thread(reward,"抽奖2").start();

	}

}

//创建奖金类
class Reward implements Runnable{
	int[] arr = {10,5,20,50,100,200,500,800,2,80,300};
	List<Integer> list = new ArrayList<>();

	public void run() {	//重写run方法
		while(true) {
			lottery();
			if(list.size() == arr.length)
				break;//当list长度和arr长度相等时说明执行完毕,结束循环
		}
	}
	
	public synchronized void lottery() {
		int index = new Random().nextInt(arr.length);//随机获取数组下标
		if(!list.contains(index)) {//判断list中有没有重复添加素组下标,如果重复则不执行
			list.add(index);		
			try {
				Thread.sleep(200);	
			} catch (Exception e) {
				System.out.println(e);
			}
			String name = Thread.currentThread().getName();//获取线程名字
			if(name.equals("抽奖1"))
				System.out.println(name+"又产生了一个"+arr[index]+"元大奖");
			else
				System.out.println(name+"又产生了一个"+arr[index]+"元大奖");
		}
	}
}

输出结果:
Java——有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}

相关标签: Java练习