用Java产生100个1-150间不重复数字
核心代码
importjava.util.Arrays;
/**
*用Java产生100个1-150的数字
*/
publicclassRandomTest{
publicstaticvoidmain(String[]args){
int[]resultArr=produceNum(1,150,100);
for(Integernum:resultArr){
System.out.println(num);
}
System.out.println("+++++++++++++++++===================+++++++++++++");
//对结果数组排序后再输出
Arrays.sort(resultArr);
for(Integernum:resultArr){
System.out.println(num);
}
}
/**
*产生随机数字
*@paramminNum最小数字
*@parammaxNum最大数字
*@paramnumCount产生的数字个数
*@return结果数组
*/
publicstaticint[]produceNum(intminNum,intmaxNum,intnumCount){
//入参校验
//如果随机数的个数大于产生随机数的范围;或最大数小于最小数
//直接返回null,说明入参不符合要求
if(numCount>(maxNum-minNum+1)||maxNum<minNum){
returnnull;
}
//存放结果的数组
int[]resultArr=newint[numCount];
//count记录已产生的随机数的个数
intcount=0;
while(count<numCount){
//产生随机数
intnum=(int)(Math.random()*(maxNum-minNum))+minNum;
//flag定义本次产生的随机数是否已在数组中
booleanflag=true;
//遍历数组中已产生的随机数
for(inti=0;i<count;i++){
//同本次产生的随机数最比较
if(num==resultArr[i]){
//如果已存在相同的值,则跳出for循环,继续外层的while循环,产生下一个随机数
flag=false;
break;
}
}
//如果本次产生的随机数在数组中不存在,则将该随机数存放在数组中
if(flag){
resultArr[count]=num;
//数组中已产生的随机数个数加1
count++;
}
}
returnresultArr;
}
}
代码解读
1intnum=(int)(Math.random()*(maxNum-minNum))+minNum;
Math.random()产生的是0~1之间的double类型的随机数
Math.random()*10便会得到0~10之间的随机数,转int后便是0~9;如果给Math.random()*10+1,便是1~11之间的随机数,转int便是1~10。
这里的1相当于程序中的最小值,11则为最大值。
这样便得到了产生随机数的(int)(Math.random()*(maxNum-minNum))+minNum
2for(inti=0;i<count;i++){
由于每次产生的num都是随机的,所以无法保证重复的问题,所以只有通过去同已经产生的存在数组中的数字去比较,相同,则重新产生,不同,则添加进数组。