我有一个方法可以随机化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;
}
但是,随着时间的推移,随机数显示为新的,并且这个数字会在生成器数组中重复添加。
答案 0 :(得分:1)
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);