我想生成100个唯一的随机数,但数字必须在1-10的范围内.现在我这样做:
for (int i = 0; i < 100; i++) {
Double n = rand.nextDouble(10) + 1;
arr[i] = n;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过使用数组中的if/else语句检查它们是否是唯一的来获得双数,但是它非常困难且效率低,因为数字(双数)几乎是无限的.
那么如何在不使用数组的情况下确保数字是唯一的呢?
java中是否有任何不允许重复元素的数据结构?
正如你在评论中提到的那样,没有办法在1 到100 之间生成100个唯一的整数.使用doubles允许你这样做,但不保证它本身的唯一性(即使有极少数机会获得重复的项目),所以你必须自己保证 - 例如,通过使用Set:
Set<Double> doubles = new HashSet<>();
while (doubles.size() < 100) {
doubles.add(1 + rand.nextDouble() * 9);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
JDK 8提供了一种可以说是更优雅的方式来实现这一点:
List<Double> doubles =
rand.doubles()
.distinct()
.map(d -> 1 + d * 9)
.limit(100)
.boxed()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)