Java抽奖问题(避免重复)

某单位现有100名员工,他们的工号从0001-0100。假若在年末晚会上要组织抽奖活动:根据工号随机抽出20名幸运奖、10名三等奖、7名二等奖、2名一等奖、1名特等奖,抽奖规则是:先抽级别低的奖项,后抽级别高的奖项,依次进行;已获得奖项的不再参加后续奖项的抽取。现请使用Math类随机方法编程模拟抽奖过程,分5次输出不同级别的获奖工号。

import java.lang.Math;
public class math6{
    public static void main(String[] args){
        int []choose=new int[1000];//建立整型的数组(储存1-100)
        String []res=new String[1000];//建立字符串数组(储存格式0001-0100)
        int a,c=40,j=0;//a为随机数,c为中奖总人数,j为整形数组初始化的下标
        for (var i=0;i<c;i++){
            int b=0;//b作为条件(后面用到)
            a=(int)Math.ceil(Math.random()*99+1);//随机数a(0-100)
            if(i==0){//判断条件,默认第一个随机数放在整形数组的第一个储存单位
                choose[j]=a;
                j++;
            }else{
                for (var k=0;k<j;k++){//循环
                    if(choose[k]==a){//判断如果随机数在已存储的数组中出现则判断条件b=1
                        b=1;
                        break;
                    }
                }
                if (b==0){//不触发条件则接着往整形数组中存
                    choose[j]=a;
                    j++;//别忘了下标要进一
                }
                else//触发条件则不存,并且随机数的循环数要+1
                    c++;
            }
        }
        for (var i=0;i<j;i++){//做判断将整型数组中抽中的格式化放入字符串数组
            if (choose[i]<10)
                res[i]="000"+choose[i];
            else if (choose[i]<100&&choose[i]>=10)
                res[i]="00"+choose[i];
            else if (choose[i]==100)
                res[i]="0"+choose[i];
        }
        //接下来就是根据抽奖出来的顺序输出,先出的为低级奖
        System.out.println("获得幸运奖的20人有:");
        for (var i=0;i<20;i++)
            System.out.print(res[i]+" ");
        System.out.println("\n获得三等奖的10人有:");
        for (var i=20;i<30;i++)
            System.out.print(res[i]+" ");
        System.out.println("\n获得二等奖的7人有:");
        for (var i=30;i<37;i++)
            System.out.print(res[i]+" ");
        System.out.println("\n获得一等奖的2人有:");
        for (var i=37;i<39;i++)
            System.out.print(res[i]+" ");
        System.out.println("\n获得特等奖的是:\n"+res[j-1]);
    }
}

Java萌新,实验报告题,若代码有误还请指教

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值