我有一种方法可以随机分配1到5之间的数字。
当所有5个数字也都排序时,该方法需要停止(现在不这样做)
我的实际代码是:public ArrayList<String> generated = new ArrayList<String>();
在顶部
方法本身是:
public int RandomizeQuestion () {
// Question numbers
final int min = 1;
final int max = 5;
Random r = new Random();
int qran = r.nextInt((max - min) + 1) + min;
if (Collections.singletonList(generated).contains(qran)) {
RandomizeQuestion();
} else {
generated.add(String.valueOf(qran));
}
return qran;
}
但是,这种情况总是在随机数一直显示为新数,并且此数反复在生成器数组中添加的情况下发生。
最佳答案
Collections.singletonList(generated)
返回一个包含List<ArrayList<String>>
作为其唯一元素的generated
。显然,它将不包含qran
。另外,在尝试添加新项目之前,您无需检查列表是否为预期的长度。这样的事情应该起作用:
if (generated.size() < max - min + 1) {
if (generated.contains(String.valueOf(qran))) {
RandomizeQuestion();
} else {
generated.add(String.valueOf(qran));
}
}
但是,这是一种改组值序列的更简单,更有效的方法:
// generate a list of values between min and max
generated = IntStream.rangeClosed(min, max)
.map(String::valueOf)
.collect(Collectors.toCollection(ArrayList::new));
// shuffle them
Collections.shuffle(generated);