如何从随机数表中删除重复数?

时间:2019-04-01 14:07:34

标签: 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;) {
            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;
            }
        }

1 个答案:

答案 0 :(得分:1)

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);

没有重复的7或任何其他int。 如果必须生成第二个数组,只需在while循环中再添加20个位置,然后获取列表的最后20个项目。