我正在尝试编写代码以在不使用集合的情况下改组数组。

我的洗牌代码

金额

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上是均匀的,这将使您的数组重新排列,每个排列的可能性均等。对此的论点是直接的。

10-04 17:59