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

 我来答
jayby00
推荐于2018-06-06 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:50%
帮助的人:50.6万
展开全部
首先,需要一个范围内的随机数,第二部判重,如果重复了就再次随机.
假设我们需要一个m到n的随机数..
需要用到random函数随机一个从0到1的数.然后再乘m到n的范围,再加m
double i = Math.random() * (m - n) + m ----> 生成随机数
判重..方法有很多种了..比如我们用一个Set来存放已经存在的..
Set<Double> set = new LinkedHashSet<>();
if (set.contains(i)) { 重复了,重新随机 }
else { 向set中添加: set.add(Double.valueOf(i)); }
2017年8月28日 21:37:44
丿如楠1521
2013-06-02
知道答主
回答量:58
采纳率:100%
帮助的人:13.5万
展开全部
加一个循环判断,重复就在产生
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
郁郁景景
2018-09-17
知道答主
回答量:1
采纳率:0%
帮助的人:832
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-30
展开全部
生成下一个时,判断前面的是否存在,如果存在重新生成

~
~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baby嘟嘟表妹
2018-06-06
知道答主
回答量:17
采纳率:0%
帮助的人:4.7万
展开全部

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

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<max;i++){
                range[i] = i + min;
            }

            //  从数字范围数组中随机取数字,取出后把范围数组中的数字删除
            for(let i=0;i<digit;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;
        }
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式