繁体   English   中英

生成随机数时如何防止重复

[英]How to i prevent duplicates when generating a random number

我想要从 1-36 生成 7 个不同的变量,但是如果在最短的可能行内不使用数组或 arraylist,这些变量的数量不得与以前相同

private final int getconsolationprice1=rand.nextInt(36);
private final int getconsolationprice2=rand.nextInt(36);
private final int getconsolationprice3=rand.nextInt(36);
private final int getconsolationprice4=rand.nextInt(36);
private final int getconsolationprice5=rand.nextInt(36);
private final int getconsolationprice6=rand.nextInt(36);
private final int gettopprice=rand.nextInt(36);
 while((consolationprize1==consolationprize2)||
         (consolationprize1==consolationprize3)||
         (consolationprize1==consolationprize4)||
         (consolationprize1==consolationprize5)||
         (consolationprize1==topprize)||
         (consolationprize2==consolationprize1)||
         (consolationprize2==consolationprize3)||
         (consolationprize2==consolationprize4)||
         (consolationprize2==consolationprize5)||
         (consolationprize2==topprize)||
         (consolationprize3==consolationprize1)||
         (consolationprize3==consolationprize2)||
         (consolationprize3==consolationprize4)||
         (consolationprize3==consolationprize5)||
         (consolationprize3==topprize)||
         (consolationprize4==consolationprize1)||
         (consolationprize4==consolationprize2)||
         (consolationprize4==consolationprize3)||
         (consolationprize4==consolationprize5)||
         (consolationprize4==topprize)||
         (consolationprize5==consolationprize1)||
         (consolationprize5==consolationprize2)||
         (consolationprize5==consolationprize3)||
         (consolationprize5==consolationprize4)||
         (consolationprize5==topprize)||
         (topprize==consolationprize1)||
         (topprize==consolationprize2)||
         (topprize==consolationprize3)||
         (topprize==consolationprize4)||
         (topprize==consolationprize5))
         {
            consolationprize1=rand.nextInt(36);
            consolationprize2=rand.nextInt(36);
            consolationprize3=rand.nextInt(36);
            consolationprize4=rand.nextInt(36);
            consolationprize5=rand.nextInt(36);
            topprize=rand.nextInt(36);
         }

你可以用这个

ThreadLocalRandom.current().ints(0, 36).distinct().limit(36).forEach(System.out::println);

删除 sysout 并根据需要向变量添加值

你可以试试这个

不使用数组或数组列表 - 您可以使用 LinkedHashSet

    Random rand = new Random();

        Set<Integer> number = new LinkedHashSet<Integer>();
        while (number.size() < 7) {
            Integer generatedNumber = rand.nextInt(36) + 1;

            number.add(generatedNumber);
        }
        for (Integer integer : number) {
            System.out.println(integer);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM