java 无重复生成一个范围内的随机数

本文介绍了一个使用Java实现的随机数生成类RandRange。该类能够生成指定范围内的随机数序列,并通过一种高效的算法确保每个数字出现的概率相同。文章包含了完整的代码示例,展示了如何初始化数组并对其进行随机化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import java.util.Random;
 4 
 5 
 6 public class RandRange {
 7 
 8     public List<Integer> get(int start, int end){
 9         int cnt = end - start + 1;//计算从start到end之间数字的个数。
10         List<Integer> randRes = new ArrayList<Integer>();
11         for(int i = start;i<=end;i++){
12             randRes.add(i);//初始化一个数组,正序
13         }
14         Random r=new Random();
15         while(cnt-->1){
16             int rand_sub = r.nextInt((int) cnt);//生成一个[0,cnt)的整数,作为我们要选择的随机下标
17             int temp = randRes.get(cnt);                     /*交换随机下标所指定的元素与最后一个元素,然后cnt--,一次类推。也就是说,我们把随机
18             randRes.set(cnt, randRes.get(rand_sub));         选出来的元素都排在了最后,而随机下标被cnt限制在前面未被选择的元素序列范围中,直到全部                                      被选择过,循环结束。算法复杂度可以控制在o(n)*/
19             randRes.set(rand_sub,temp);
20         }
21         return randRes;
22     }
23     public static void main(String[] args) {
24         RandRange r = new RandRange();
25         List<Integer> rand_array = r.get(0,11);
26         System.out.println(rand_array);
27     }
28 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值