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

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和你的范围相同或者很接近的时候

    评论

报告相同问题?

悬赏问题

  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区