拿宿舍抽签来举例子(宿舍抽签出人去干活,6人间)
直接先上代码,再解释
package Shuai;
import java.util.Random;
import java.util.Scanner;
public class 抽签需改善 {
public static void main(String[]args) {
System.out.println("请输入你要抽取的人数");
Scanner scanner=new Scanner(System.in);
int x=scanner.nextInt();
int[]a=new int[x];
int randomNum = 0;
int key=0;
for (int i = 0; i < a.length; i++) {
randomNum=(int)(Math.random()*x+1);
if(i==0) {
randomNum=a[i];
continue;
}
for (int j = 0; j <= i; j++) {
if(a[j]==randomNum) {
key=1;
}
}
if(key==0) {
a[i]=randomNum ;
}else {
i--;
key=0;
continue;
}
}for (int c = 0; c < a.length; c++) {
if(a[c]==0) {
System.out.println("张超");}
if(a[c]==1) {
System.out.println("晋子健");}
if(a[c]==2) {
System.out.println("邵金河");}
if(a[c]==3) {
System.out.println("刘洋");}
if(a[c]==4) {
System.out.println("路金熙");}
if(a[c]==5) {
System.out.println("李先凯");}
}
}
}
第一步 ; 决定抽几个人并创建数组
利用Scanner从键盘录入要抽取的人数x(本例子为6),并创建有x个元素的数组
System.out.println("请输入你要抽取的人数");
Scanner scanner=new Scanner(System.in);
int x=scanner.nextInt();
int[]a=new int[x];
第二步 ;引入key与randomNum
为了生成不重复的随机数,除了引入随机数以外我们用一个key来当作一个衡量。
int randomNum = 0;
int key=0;
第三步 ;生成不重复的随机数
for (int i = 0; i < a.length; i++) {
randomNum=(int)(Math.random()*x+1);//生成x个随机数
if(i==0) {
randomNum=a[i];
continue;
}
for (int j = 0; j <= i; j++) {
if(a[j]==randomNum) {
key=1;
}
}
if(key==0) {
a[i]=randomNum ;
}else {
i--;
key=0;
continue;
}
在这里对第三步第二行的这里的+1给出一个解释。
randomNum=(int)(Math.random()*x+1);
Math.random()返回一个double类型的0.0-1.0之间的数值,包括0,不包括1,这个数值*100,那范围不就是0-100(不包括)了么。强转之后范围就是0-99,为了达到我们手动选择生成几个随机数的目的,让其+1.
总之一句话解释就是由于强转的原因,范围缩小了1,现在给它补回来。
进入正文解释
首先根据注释得知,先生成x(6)个随机数。
randomNum=(int)(Math.random()*x+1);//生成x个随机数
其次,当i==0时,记录下此时的随机数并放入数组a中成为下表为0的数组中的第一个元素a[i]=randomNum
(a[0]=第一个随机数)
然后使用continue结束语句使for循环后面的内容正常进行。
for (int j = 0; j <= i; j++) {
if(a[j]==randomNum) {
key=1;
}
}
if(key==0) {
a[i]=randomNum ;
}else {
i--;
key=0;
continue;
}
若a[1]=randomNum(与a[0]重复了),则使key=1,并使i–,key=0(再循环一次),
若a[1]与a[0]不同,则将其放入数组中称为下标为1的数组中的第二给元素。
总之着两句话的意思用一句话解释就是
在将随机数放入数组前进行一个判断
若是数组里的数与新生成的数有重复则再生成一次随机数,若是无重复则
将其录入数组中,直到录完并形成你所需要的数组。