我的问题是我希望我的程序在 0 到 3 之间的数字范围内做出四个唯一的随机选择,我尝试在随机类中执行此操作,但我做不到,如果您可以通过代码提供帮助,那就太好了,我的程序将是这样的,以使其清楚
my range
0 1 2 3 randomly chosen number 3
0 1 2 randomly chosen number 1
0 2 randomly chosen number 2
0 it will choose 0 and then the program closes
最佳答案
您实际上正在寻找从 0
到 n-1
的整数的随机排列。
您可以将 0
到 n-1
的数字放入 ArrayList
中,然后调用 Collections.shuffle()
在该列表上,然后从列表中一一获取数字:
final int n = 4;
final ArrayList<Integer> arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i);
}
Collections.shuffle(arr);
for (Integer val : arr) {
System.out.println(val);
}
Collections.shuffle()
保证所有排列发生的可能性相同。
如果您愿意,您可以将其封装到 Iterable
中:
public class ChooseUnique implements Iterable<Integer> {
private final ArrayList<Integer> arr;
public ChooseUnique(int n) {
arr = new ArrayList<Integer>(n);
for (int i = 0; i < n; i++) {
arr.add(i);
}
Collections.shuffle(arr);
}
public Iterator iterator() {
return arr.iterator();
}
}
当您迭代此类的实例时,它会产生随机排列:
ChooseUnique ch = new ChooseUnique(4);
for (int val : ch) {
System.out.println(val);
}
在一次特定的运行中,打印出 1 0 2 3
。
关于java - 选择具有特定范围的唯一随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923781/