Java产生100个1-150间不重复数字详解编程语言

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10726.html

(0)
上一篇 2021年7月19日 10:27
下一篇 2021年7月19日 10:27

相关推荐

发表回复

登录后才能评论