gpt4 book ai didi

Java - 生成一组不重复的随机数

转载 作者:行者123 更新时间:2023-12-01 10:50:11 24 4
gpt4 key购买 nike

使用下面的代码,我尝试生成 10 个 1 到 50 之间的随机数,并且不会打印出任何重复项。

我当前的代码位于文件 RandomNum.java 中:

public class RandomNum
{
public static void main(String[] args)
{
int counter = 0;
int num = 0;
while(counter<=10)
{
num=(int)(1+Math.random()*(50));
System.out.println("The number"+" "+num+" "+"was drawn.");
++counter;
}
}
}

此代码成功生成并打印出数字的值,但我想让程序打印出 1 到 50 之间的 10 个唯一数字,而不是包含任何重复项。

我该如何去做呢?

谢谢!

最佳答案

您可以使用随机播放。

List<Integer> ints = IntStream.range(1, 50).boxed().collect(toList());
Collections.shuffle(ints);
List<Integer> ten = ints.subList(0, 10);

或者您可以使用 LinkedHashSet。注意:如果您使用 HashSet,则顺序可能不是很随机。例如如果您以任何顺序将 0 到 10 添加到 HashSet 中,它都会按排序顺序排列。

Set<Integer> ints = new LinkedHashSet<>();
Random rand = new Random();
while(ints.size() < 10)
ints.add(rand.nextInt(50) + 1);
// copy to a list to taste.

或者您可以使用 map 。

List<Integer> collect = IntStream.range(1, 50).boxed()
.collect(groupingBy(i -> Math.random()))
.values().stream().flatMap(Collection::stream)
.limit(10).collect(toList());

或者您可以使用 Random.ints

List<Integer> collect = new Random().ints(1, 50)
.boxed()
.collect(Collectors.toCollection(LinkedHashSet::new)) // distinct
.stream().limit(10)
.collect(Collectors.toList());

注意:在之前的答案中使用了.distinct(),但是,用于执行唯一性的集合的选择并未定义,事实上,Java 8 中恰好使用了 HashSet,这是一个很糟糕的方法。如前所述的选择。

关于Java - 生成一组不重复的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com