Java产生100个1-150间不重复数字

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

    import java.util.Arrays;  
      
    /** 
     * 用Java产生100个1-150的数字 
     */  
    public class RandomTest {  
      
        public static void main(String[] args) {  
            int[] resultArr = produceNum(1, 150, 100);  
            for (Integer num : resultArr) {  
                System.out.println(num);  
            }  
              
            System.out.println("+++++++++++++++++===================+++++++++++++");  
              
            // 对结果数组排序后再输出  
            Arrays.sort(resultArr);  
            for (Integer num : resultArr) {  
                System.out.println(num);  
            }  
        }  
      
        /** 
         * 产生随机数字 
         * @param minNum 最小数字 
         * @param maxNum 最大数字 
         * @param numCount 产生的数字个数 
         * @return 结果数组 
         */  
        public static int[] produceNum(int minNum, int maxNum, int numCount) {  
              
            // 入参校验  
            // 如果随机数的个数大于产生随机数的范围;或最大数小于最小数  
            // 直接返回null,说明入参不符合要求  
            if (numCount > (maxNum - minNum + 1) || maxNum < minNum) {  
                return null;  
            }  
              
            // 存放结果的数组  
            int[] resultArr = new int[numCount];  
              
            // count 记录已产生的随机数的个数  
            int count = 0;  
              
            while(count < numCount) {  
                  
                // 产生随机数  
                int num = (int) (Math.random() * (maxNum - minNum)) + minNum;  
                  
                // flag 定义本次产生的随机数是否已在数组中  
                boolean flag = true;  
                  
                // 遍历数组中已产生的随机数  
                for (int i=0; i<count; i++) {  
                      
                    // 同本次产生的随机数最比较  
                    if (num == resultArr[i]) {  
                          
                        // 如果已存在相同的值,则跳出for循环,继续外层的while循环,产生下一个随机数  
                        flag = false;  
                        break;  
                    }  
                }  
                  
                // 如果本次产生的随机数在数组中不存在,则将该随机数存放在数组中  
                if (flag) {  
                    resultArr[count] = num;  
                      
                    // 数组中已产生的随机数个数加1  
                    count++;  
                }  
            }  
              
            return resultArr;  
        }  
    }  

代码解读

1  int num = (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


for (int i=0; i<count; i++) {

由于每次产生的num都是随机的,所以无法保证重复的问题,所以只有通过去同已经产生的存在数组中的数字去比较,相同,则重新产生,不同,则添加进数组。