多线程练习:抽奖箱抽奖

package homeworkday11;
import java.util.ArrayList;
/*第四题:分析以下需求,并用代码实现
有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,2,80,300,700};
创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”,随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
每次抽出一个奖项就打印一个(随机但是奖励不能重复)
1.每次抽出一个奖项就打印一个(随机)
 抽奖箱1 又产生了一个 10 元大奖
 抽奖箱1 又产生了一个 100 元大奖
 抽奖箱1 又产生了一个 200 元大奖
 抽奖箱1 又产生了一个 800 元大奖 
 抽奖箱2 又产生了一个 700 元大奖   
 //.....
2.每次抽的过程中,不打印,抽完时一次性打印(随机)
 在此次抽奖过程中,抽奖箱1总共产生了6个奖项,分别为:10,20,100,500,2,300最高奖项为300元,总计额为932元
 在此次抽奖过程中,抽奖箱2总共产生了6个奖项,分别为:5,50,200,800,80,700最高奖项为800元,总计额为1835元
3.每次抽的过程中,不打印,抽完时一次性打印(随机)
 在此次抽奖过程中,抽奖箱1总共产生了6个奖项,分别为:10,20,100,500,2,300最高奖项为300元,总计额为932元
 在此次抽奖过程中,抽奖箱2总共产生了6个奖项,分别为:5,50,200,800,80,700最高奖项为800元,总计额为1835元
 在此次抽奖过程中,抽奖箱2中产生了最大奖项,该奖项金额为800元
------------------------------------------------------------------*/
public class test4 {
 public static void main(String[] args) {
  ChouJiang3 l= new ChouJiang3();
  Thread t=new Thread(l);
  Thread t1=new Thread(l);
  t.start();
  t.setName("抽奖箱A");
  t1.start();
  t1.setName("抽奖箱B");
 }
}//主程序末尾

package homeworkday11;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
class ChouJiang3 implements Runnable {
    public static int[] arr = {10,5,20,50,100,200,500,800,2,80,300,700};
    int num = arr.length;
    static ArrayList<Integer> list =  new ArrayList<Integer>();
    static ArrayList<Integer> list1 =  new ArrayList<Integer>();
    static int lmax;
   
    static{
     for(int money:arr){
      list1.add(money);
     }
    lmax=Collections.max(list1);
    }
   
    @Override
    public void run() {
            String threadName = Thread.currentThread().getName();
            ArrayList<Integer> box =  new ArrayList<Integer>();
            while(true) {
                    synchronized(this){
                            if(num<=0)
                                    break;
                            //创建随机数对象
                            Random r = new Random();
                            int index ;
                            //为了获取不重复的索引值
                            while(true) {
                                    index = r.nextInt(arr.length);
                                    if(list.contains(index))
                                            continue;
                                    else {
                                            list.add(index);
                                            break;
                                    }
                            }
                            int money = arr[index];
                            box.add(money);
                            //在此次抽奖过程中,抽奖箱1总共产生了6个奖项,分别为:10,20,100,500,2,300
                            num--;
                    }
            }
            System.out.println("在此次抽奖过程中,"+threadName + "总共产生了 "+box.size()+"个奖项,分别为:"+method1(box)+"最高奖项为"+method2(box)+"元,总计额为"+method3(box)+"元");
            if(method2(box)==lmax){
             System.out.println("在此次抽奖过程中,最大奖项在"+threadName+"中产生了,该奖项金额为"+lmax+"元");
            }
    }
//输出所有元素的方法
    public String method1(ArrayList<Integer> box){
     StringBuilder sb=new StringBuilder();
     for(int i=0;i<box.size();i++){
      sb.append(box.get(i));
      
      if(i!=box.size()-1){
       sb.append(",");
      }
     }
  return sb.toString();
    }
//求集合最大值的方法
 public int method2(ArrayList<Integer> box){
  int max=Collections.max(box);
  return max;
}
//求集合总数的方法
 public int method3(ArrayList<Integer> box){
  int sum=0;
  for (Integer integer : box) {
   sum+=integer;
  }
  return sum;
 }
 
 
}//程序末尾


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值