【发布时间】:2017-07-02 17:46:36
【问题描述】:
我正在创建一个简单的方法来模拟洗牌。我的想法是存储原始卡片组的大小,只要大小不为负就重复循环。
在循环过程中,我从列表中复制了一个对象(卡片),并将其放在另一个列表中。从原始列表中删除,并继续循环。
while(size >= 0){
int random = (int) ((Math.random() * size) + 0);
shuffledDeck.add(this.orderedDeck.get(random));
orderedDeck.remove(random);
size--;
}
这个特定牌组的大小是
int size = this.getDeckSize()-1; //51 (52 cards, from 0 to 51)
我的问题是,在几次不同的尝试中,洗好的牌组中的最后一张牌始终与未洗牌的牌组中的最后一张牌相同。这表明random 永远不会等于size-1。
我怎样才能让最后一张牌真正能够被洗牌?
(换句话说,为什么random 总是等于size-1?)
【问题讨论】:
-
你说你有52张卡片,然后继续说大小是51。大小应该是卡片的数量,即52。(
Math.random()永远不会返回1.0,如果那是什么你担心) -
你考虑过
new Random().nextInt(size)吗? -
请编辑您的代码以显示minimal reproducible example。
-
int random = (int) ((Math.random() * size) + 0);是干什么用的?为什么要加 0?
标签: java