这里的数字生成:
for( int i=0; i<3; i++) {
int randomNumbers = random.nextInt(10) + 1;
}
在这里我可以收到相同的数字。
例如:5,7,5
;
但我只需要收到不同的数字:5,1,9
.
是否有可能使用一些小段代码,或者我应该为它编写一些方法?
您可以使用仅保存唯一值的Set
:
Set<Integer> randomInts = new HashSet();
while(randomInts.size() < 3) {
randomInts.add(random.nextInt(10) + 1);
}
当然,您需要面对过度采样,但如果性能不是最重要的,这种方法很容易扩展。
这里有一种方法可以避免拒绝抽样:生成一个最多 10 个、一个最多 9 个和最多 8 个数字。通过递增避免重复。这保证了均匀分布。
int a = random.nextInt(10) + 1;
int b = random.nextInt(9) + 1;
if(b >= a) { b++; }
int c = random.nextInt(8) + 1;
if(c >= (a > b ? b : a)) { c++; }
if(c >= (a > b ? a : b)) { c++; }
在我看来,使用 while 循环可以生成具有不同数字的随机数。使用 while 循环检查该数字是否是之前生成的,以及它是否随后生成新数字。