我想生成100个唯一的随机数,但数字必须在1-10的范围内。 现在我这样做:
for (int i = 0; i < 100; i++) {
Double n = rand.nextDouble(10) + 1;
arr[i] = n;
}
我可以通过使用数组中的if / else语句检查它们是否唯一来获得双数,但这是非常困难和低效的,因为数字(双数)几乎是无限的。
那么如何在不使用数组的情况下确保数字是唯一的?
java中是否存在不允许重复元素的数据结构?
答案 0 :(得分:5)
正如您在评论中提到的那样,无法在1到100之间生成100个唯一整数。使用doubles
可以让您这样做,但不会保证唯一性本身(即使有重复项目的极小机会),所以你必须自己保证 - 例如,使用Set
:
Set<Double> doubles = new HashSet<>();
while (doubles.size() < 100) {
doubles.add(1 + rand.nextDouble() * 9);
}
修改:
强>
JDK 8提供了一种可以说是更优雅的方式来实现这一点:
List<Double> doubles =
rand.doubles()
.distinct()
.map(d -> 1 + d * 9)
.limit(100)
.boxed()
.collect(Collectors.toList());
答案 1 :(得分:0)
你可以使用这样的东西。
import java.util.*;
public class MyClass {
public static void main(String args[]) {
double[] arr = new double[100];
for (int i = 0; i < 100; i++) {
Random rand = new Random();
double n = 10*rand.nextDouble();
System.out.println(n);
arr[i] = n;
}
}
}
但是不可能在1-10之间获得唯一的100个整数。
以上程序生成类似这样的内容
4.142037859604101
2.655156962359073
3.7397565068261205
2.9699181925544247
2.747362791293101
3.243100861992423
9.308481386292623
4.96298205308679
3.4319099852820822
9.951375372917328
3.6941158775736316
1.0388381644118727
1.6895078811799191
0.9166823110491484
9.60259797093202
2.3365812211691708
8.556399515524168
2.570971809286772
1.6621912919374215
0.5896588206170794
6.921688301938134
6.325470591144598
2.35492413118687
2.1778674294915454
答案 2 :(得分:0)
Math类有许多有用的函数,至少还有一个可用于此的函数。
for(int i = 0; i < 100; i++) {
double n = (Math.random()*9) + 1;
arr[i] = n;
}
Math.random返回大于或等于0.0且小于1.0的随机正数,因此如果将其乘以9,则得到大于或等于0.0且小于9.0的数字。然后加1是确保范围在1到10之间。
如果你真的想确保所有数字都是唯一的,你可以写一个方法来检查数字是否已经在数组中。
希望这会帮助你。祝你好运!