不重复随机数算法
2023-01-17阅读(776)
问:生成不重复的随机数
- 答:本文主要涉及点:常用随机数生成的公式和判断是否重复。
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()+" ");
}
}
}
问:该如何让随机数不重复!!!我想不到了?
- 答:Random需要一个种子, 如果没给用预设的, 因为每次都一样, 所以一定会按照相同顺序, 每次开启都一致.
常见做法就是将时间当作种子, 每次运行的时间都不会一样, 自然就不会重复了. - 答:=ROUND(1+(50-1)*RAND(),0)
把公式复制粘贴到D17,向右拖动填充柄即可。如果要避免重复,应该只能用vba解决。 - 答:我也想不到啊。。。。。。。。
问:如何生成一定范围内不重复的随机数
- 答:我不知道你什么语言我提供一个思路吧!
用户名+时间(毫微秒)+永无重复的随机数组
此套算法适合文件上传时用于解决文件名重复问题
理解:
用户名:确保用户名不重复,以此限制重复的可能性仅仅出现在某个具体用户的操作中!
毫微秒(Ticks):此数重复的可能性极低。
随机数组:方法是,确认要上传几个文件并记录数量,然后循环出一个随机数组,判断:若当前随机出的数字包含在数组中则循环次数+1(也就是当前循环变量-1)回跳一次循环,以此循环出与文件数相等的随机数组;此处再一次保证具体某一个用户在单次多文件上传时不会出现文件同名情况。
若功能符合上述条件,则可以做到永无重复的文件名!
随机数组代码:
int[] intNum = new int[FileCollect.Count];
for (int i = 0; i < FileCollect.Count;i++ )
{
Random dom = new Random();
int domNum = dom.Next(0, 20000);
if (intNum.Contains(domNum)&&i!=0)
{
i = i - 1;
}
else
{
intNum[i] = domNum;
}
}