我正在創建一個簡單的方法來模擬洗牌甲板。我的想法是存儲原始卡組的大小,並且只要大小不是負數就重複循環。爲什麼Math.random忽略最後一個元素?
在循環過程中,我從列表中複製一個對象(卡),並將它放在另一個列表中。從原始列表中刪除,並恢復循環。
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)
我的問題是,在幾個不同的嘗試,在洗牌甲板上的最後一張牌是一致的同一張卡作爲最後的unshuffled甲板。這表明random
永遠不會等於size-1
。
我該怎麼做才能讓最後一張卡實際上能夠被洗牌?
(換句話說,爲什麼random
永遠等於size-1
?)
你說你有52張牌,然後繼續說,大小爲51尺寸應的卡,即52('的Math.random(數量)'從來沒有返回1.0,如果這是你擔心的) –
你有沒有考慮過'新Random()。nextInt(size)'? – hotzst
請編輯您的代碼以顯示[mcve]。 –