生成随机数不重复
2023-01-17阅读(410)
问:生成不重复的随机数
- 答:本文主要涉及点:常用随机数生成的公式和判断是否重复。
1.Math:(数据类型)Math.random()*(最大数-最小数+1)+最小值
2.Random :
Random=new Random();
int randomNumber=random.nextInt(最大值)%(最大值-最小值+1)+1;
3.不重复的随机数
方式一:
方式二:
源码:package test;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Test4 {
public static void main(String[] args) {
int b=0;int r=0;Listlist=new ArrayList();
int num=(int) ((Math.random()*8)+3);//随机生成n个随机数 《10~3》
for(int i=0;iif(!list.contains(b)){
list.add(b);
System.out.println("第:"+(i+1)+"个随机数是:"+list.get(i));
}else {i--;}
}
System.out.println("循环了"+r+"次");
Iterator it=list.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
}
}
问:如何产生不重复随机数
- 答:首先需要使用:Randomize[number] 语句,初始化随机数生成器。如果忽略了数值参数number,Randomize自动使用Timer函数的返回值作为新的随机数种子值。然后需要使用Rnd[(number)]函数,生成小于 1 但大于或等于 0 的随机值。为了生成某个范围内的随机整数,可使用以下公式:Int((upperbound - lowerbound + 1) * Rnd + lowerbound)这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。例子:Dim MyValueRandomize ' 对随机数生成器做初始化。MyValue = Int((6 * Rnd) + 1) '生成 1 到 6 之间的随机数值。注意:Rnd函数中的参数number决定了生成随机数的方式。若想得到重复的随机数序列,可以不使用Randomize语句,使用负参数值的Rnd函数即。若想得到不重复的随机数序列,必须使用Randomize语句,而且Rnd函数的参数可以大于0或等于0或者省略,或者与Randomize语句中的number相同。实际上,你的程序已经是产生非重复的随机数序列了,只不过下面的代码有点问题:If blnseeded = False ThenRandomizeblnseeded = TrueEnd Ifblnseeded是个未声明的Variant的局部变量,程序每次调用这个函数时,始终满足等于false的条件,所以Randomize始终得到执行,加之你使用了无参的Rnd函数,所以产生的已经是随机数序列了。
问:excel随机生成范围内数字,不重复
- 答:我们生成多个随机的不重复数,可以实现通过随机生成的数字做分组用。
生成简单的随机数很简单,但是要生成不重复的随机数相对而言会比较麻烦。
这里从易到难介绍几种解决问题的方法。
操作方法
01
我们这里假定要
在B列生成20个随机且不重复的数据,然后根据随机计算的结果给A列的姓名进行排序及分组。
02
如果我们
单纯地以RANDBETWEEN函数来做(下图1),生成的数据会有重复数。
03
作者给出的对策如下:
1)在C列建立辅助列,然后输入:=RAND()
RAND函数的作用是
生成0到1之间的随机数字,因为是很多位数的小数,所以基本不会出现重复值(或者说概率低到可以忽略不计)。
辅助列相关知识请参考下方经验:
04
如果仍然担心会出现重复值,我们可以
再使用一个RAND函数与之相乘,进一步降低出现重复值的概率。
05
2)在B列使用RANK函数对C列的数据进行排序。
由于C列的数值没有重复,所以RANK函数排序后的结果也不会发生重复。
06
上面的办法是比较简单的办法,我们也可以参考下图函数公式操作,但相对比较麻烦,有兴趣可以研究研究。
07
3)RAND函数和RANDBETWEEN函数都可以
通过按F9键进行数据更新。