Java 如何从随机数表中删除重复数?
我写了一个生成二十个随机数的程序。重复该程序的几率约为1/3。如何重建我的程序?有人能帮我吗Java 如何从随机数表中删除重复数?,java,random,Java,Random,我写了一个生成二十个随机数的程序。重复该程序的几率约为1/3。如何重建我的程序?有人能帮我吗 for (int i = 0; i <= 19; i++) { rand[i] = (int) (Math.random() * 60 + 1); } for(int i=0;i<=19;i++) { rand_back[i]=rand[i]; }
for (int i = 0; i <= 19; i++) {
rand[i] = (int) (Math.random() * 60 + 1);
}
for(int i=0;i<=19;i++)
{
rand_back[i]=rand[i];
}
for (int i = 0; i<=19;) {
for(int j=0;j<=19;j++) {
//porównaj czy wsytapiła juz taka sama liczba
if((rand[i]==rand_back[j])&&(j!=i)) {
rand[j]=(int) (Math.random()*60+1);
}
if(j==19){
j=0;
i++;
}
if(i==19) {
break;
}
}
if(i==19) {
break;
}
}
for(int i=0;iSet ds=new LinkedHashSet();
系统输出打印项次(“步骤1”);
对于(int i=0;i可能重复的Random r=new Random();List randomNumbers=IntStream.range(1,60).boxed().排序((i,j)->r.nextInt()).collect(Collectors.toList()).子列表(0,20);
您有两个选项:1)最常见的方法是:使用while循环,并在每次迭代中检查生成的随机数是否尚未添加。2)生成一个包含所有可省略数字的序列,然后将其洗牌。没有重复项,但您不知道得到了多少个数字。此外,该示例与双精度(应视为唯一)无关。可以通过修改
条件的来改进答案:i<10
可以是ds.size()<10
。另外,HashSet
不会保留顺序,您应该使用另一个实现,例如LinkedHashSet
。尝试编写第一个答案并获得一个好的代码是一个很大的挑战。谢谢您的建议@ArnaudDenoyelle
Set<Integer> ds = new LinkedHashSet<>();
System.out.println("step-1");
for( int i=0; i<10; i++ )
ds.add( i );
ds.add( (int) (7d) );
ds.add( (int) (7d) );
ds.add( (int) (17d) );
ds.forEach(System.out::println);
System.out.println("step-2");
while (ds.size() < 20)
ds.add( (int) (Math.random()*100) );
System.out.println("Size: " + ds.size());
ds.forEach(System.out::println);