某单位现有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萌新,实验报告题,若代码有误还请指教