cjMoke 2017-11-05 13:03 采纳率: 0%
浏览 1866

java中在某一范围取得n随机且不同的数如何实现?

除了代码,重要的是分析。。我实在想不明白这个了,来求大神们帮帮忙

  • 写回答

6条回答 默认 最新

  • threenewbee 2017-11-05 13:20
    关注

    有三个常见的思路
    (1)生成一个包含这个范围(假设范围是2-6)的数组,内容是连续序数。比如 [2,3,4,5,6]
    再生成一个和它相同长度,但是里面存随机数的数组,比如[432,541,406,67,190] (实际上随机数的范围可以是1~2^31-1)
    对这个数组排序,并且按照原来的顺序得到原始下标,比如排序后[67,190,406,432,541],对应原来下标是[3,4,2,0,1]也就是原来67下标是3,现在第一个元素就是3,别的类似。
    最后,用这个打乱的下标,对你原始数据索引,比如3,那么就找到 [2,3,4,5,6] 的下标3的数字,也就是5,以此类推。得到[5,6,4,2,3]
    [5,6,4,2,3]就是对[2,3,4,5,6]也就是你的范围打乱的结果,你要n个数,就从中依次取n个就可以了。
    这个办法叫做洗牌算法,适合n和你的范围相同或者很接近的时候

    评论

报告相同问题?