我想做的是拿走我的数组 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/