怎样用java产生一个指定范围而且不重复的随机数?

2024-11-01 14:49:34
推荐回答(5个)
回答1:

首先,需要一个范围内的随机数,第二部判重,如果重复了就再次随机.
假设我们需要一个m到n的随机数..
需要用到random函数随机一个从0到1的数.然后再乘m到n的范围,再加m
double i = Math.random() * (m - n) + m ----> 生成随机数
判重..方法有很多种了..比如我们用一个Set来存放已经存在的..
Set set = new LinkedHashSet<>();
if (set.contains(i)) { 重复了,重新随机 }
else { 向set中添加: set.add(Double.valueOf(i)); }
2017年8月28日 21:37:44

回答2:

加一个循环判断,重复就在产生

回答3:

回答4:

生成下一个时,判断前面的是否存在,如果存在重新生成

~
~

回答5:

写了个比较简单易懂的方法,包含三个参数:生成几位数字,生成数字范围的最小值,最大值

typeScript代码,主要看思路就好

    /**
     * 生成不重复的digit位数字,最小值min,最大值max
     */
    codeEasyInit(digit:number,min:number,max:number): number[]{
        //  判断位数是否超过最大值和最小值的差+1
        if(max - min + 1 >= digit){
            let range:number[] = [];
            let result = [];

            //  生成数字的范围
            for(let i=0;i                range[i] = i + min;
            }

            //  从数字范围数组中随机取数字,取出后把范围数组中的数字删除
            for(let i=0;i                let numIndex = Math.floor(Math.random()*(range.length-1));
                let numValue = range[numIndex];
                result[i] = numValue;
                range.splice(numIndex,1);
            }
            console.log(`init simple code: ${result}`);
            return result;
        } else {
            console.log(`The number of digits is too large to be generated`);
            return null;
        }
    }