用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都是随机的,所以无法保证重复的问题,所以只有通过去同已经产生的存在数组中的数字去比较,相同,则重新产生,不同,则添加进数组。