【发布时间】:2017-01-26 05:31:23
【问题描述】:
我已经阅读了很多关于该主题的内容,但我仍然对此感到疑虑。 请帮忙!
我创建了一副 52 张牌:
int[] deck = new int[52];
for (int i = 0; i < deck.length; i++) {deck[i] = i;}
现在,我想正确地洗牌,而不是遵循任何模式或功能。
我将在我的算法中使用 Math.random() 方法:
for (int i = 0; i < deck.length; i++) {
int j = (int)(Math.random() * deck.length); // Get a random index out of 52
int temp = deck[i]; // Swap the cards
deck[i] = deck[j];
deck[j] = temp;
}
然而,我在这里遇到的问题是我有时可能会得到重复;结果,一些卡片/值完全丢失了。
我几乎可以肯定我没有丢弃我已经使用过的索引/值,这可能是上述问题的核心。但是我该怎么做呢?
有什么建议吗?可能,遵循我同样的思路。非常感谢!
【问题讨论】:
-
复制什么? j的重复值? i 和 j ?什么?
-
我随机生成和/或已经分配的副本
-
你能给我们看一个你的输出有重复的例子吗?代码中似乎没有任何错误会产生重复。所以也许你测试重复的方式是错误的。
-
当你生成随机数时,你会得到重复。洗牌时没有任何问题。
-
deck应该是List<Integer>,然后你可以只是Collections.shuffle()。
标签: java algorithm duplicates shuffle