java - 随机 "shaking"一个数组来分配新的随机点

标签 java arrays random

我想做的是拿走我的数组 coin[]。基本上将每个硬币重新排列到不同的位置。这就是我到目前为止所拥有的。但当我这样做时,什么也没有发生。意味着所有值保持不变。除了最后一个。那一个改变了。

public void shake() 
{
    for (int i = 0; i < coins.length; i++)
    {
        int index = Coin.RANDOM.nextInt(coins.length);
        Coin temp = coins[index];
        coins[index] = coins[i];
        coins[i] = temp;

        System.out.print(coins[i] + ", ");
    }
}

我像这样实例化随机:

public static long SEED = System.currentTimeMillis();
public static Random RANDOM = new Random(SEED);

最佳答案

请注意这一行

System.out.print(coins[swap] + ", ");

显示已经移动(交换)的硬币。也许您正在考虑在i展示新硬币索引:coins[i] (无论如何这都是不正确的,因为已经显示的硬币仍然可以在下一次迭代中交换)。可能最好创建第二个 for循环显示最终的硬币值。

但这不仅仅是这里的问题。要随机打乱数组,您应该使用 Fisher-Yates算法与您的方法略有不同。您可以在 SO 上找到该算法的 Java 实现.

如果您有 List<Coin>而不是Coin[] (列表而不是数组)您可以使用 Collections.shuffle 方法并确保算法正确,并且您总是会得到随机结果。

关于java - 随机 "shaking"一个数组来分配新的随机点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991540/

相关文章:

java - 打印二维字符数组

php - 生成随机数

java - Math.random() 与 Random.nextInt(int)

java - 如何使用 daimajia/AndroidImageSlider 库在图像滑动时更改 TextView 的文本?

Java String 将 '&' 替换为 & 而不是 & 为 &amp;

arrays - Fortran:选择可分配数组的等级

java - java中生成随机数的switch语句: not working

java - 如何在没有硬编码路径的情况下从 64 位 java 进程启动 32 位 java 进程

java - 如何访问证书扩展(信息)值?

c++ - struct() 和数组 C++ 的问题