我正在尝试编写代码以在不使用集合的情况下改组数组。
我的洗牌代码
金额
private double amounts[] = { 0, 0.01, 1000000, 25, 250000, 75, 50, 1000,
200, 100, 400000, 750, 5000, 750000, 500, 100000, 300, 75000, 800,
20, 300000, 10, 50, 750, 25, 5, 1 };
public void Shuffle(){
Random rgen = new Random();
for (int i=0; i > amounts.length; i++) {
int randomPosition = rgen.nextInt(amounts.length);
double temp = amounts[i];
amounts[i] = amounts[randomPosition];
amounts[randomPosition] = temp;
}
}
启动它的代码
public void casesSetup() {
for (int i = 0; i < briefcase.length; i++) {
if (i == 0) {
} else {
briefcase[i] = new Briefcase();
double value = amounts[i];
briefcase[i].setAmount(value);
briefcase[i].setFace(i);
}
}
}
我的问题是,没有将他们随机化,谁知道为什么?
最佳答案
我的提示是开始反向洗牌:
Random rgen = new Random();
for (int i = amounts.length - 1; i > 0; --i) {
int randomPosition = rgen.nextInt(i + 1);
double temp = amounts[i];
amounts[i] = amounts[randomPosition];
amounts[randomPosition] = temp;
}
假设Random.nextInt(N)的分布在0..N-1上是均匀的,这将使您的数组重新排列,每个排列的可能性均等。对此的论点是直接的。