android 随机不重复,android:生成没有重复的随机数

这个博客介绍了一个Java类`NoRepeatRandom`,用于生成指定范围内不重复的随机数。类通过维护一个数字数组并每次从数组中移除已选择的元素来实现。在数组非空时,可以调用`GetRandom`方法获取新的随机数,当数组为空时返回-1。示例代码展示了如何使用该类生成0到10之间的12个不重复随机数。

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

的一种方法,从0与出重复获得N个随机数到N-1是创建这N个数字阵列和创建一个随机数字,它将选择该数组的一个索引。然后从该数组中删除索引,并继续使用N-1号码等。

class NoRepeatRandom

{

private int[] number = null;

private int N = -1;

private int size = 0;

public NoRepeatRandom(int minVal, int maxVal)

{

N = (maxVal - minVal) + 1;

number = new int[N];

int n = minVal;

for(int i = 0; i < N; i++)

number[i] = n++;

size = N;

}

public void Reset() { size = N; }

// Returns -1 if none left

public int GetRandom()

{

if(size <= 0) return -1;

int index = size * Math.random();

int randNum = number[index];

// Swap current value with current last, so we don't actually

// have to remove anything, and our list still contains everything

// if we want to reset

number[index] = number[size-1];

number[--size] = randNum;

return randNum;

}

}

void Test()

{

NoRepeatRandom nrr = new NoRepeatRandom(0, 10);

for(int i = 0; i < 12; i++)

System.out.println("Random number: " + nrr.GetRandom());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值