0
我有一副撲克牌對象,基本上只是用0-51(52張牌)填充一個牌組,然後洗牌。我有一個cards.deal()方法返回一張卡片。當我使用cards.pop()時,我總是得到不同的數字,這是預期的;然而,當我使用cards.shift()時,它總是返回0.我滿足於使用流行音樂,但只是爲了學習目的而瞭解,爲什麼我在使用shift時總是得到0。我已經將洗牌的數量改爲10000這樣的龐大數字,以確保它足夠混洗,以實際交換陣列中的第一個元素。即使在0和51之間生成了10,000個隨機數後,Math.ceil方法是否可能不會返回0?這裏發生了什麼?Javascript shift()總是返回0
function Deck(){
var cards = [];
this.shuffle = function(){
var tempCardHolder = 0;
var randomNumber = 0;
var randomNumber2 = 0;
// fill the card array with 52 cards
for (x = 0; x <= 51; x++){
cards[x] = x;
}
// now let's shuffle them up by swapping two cards randomly 50 times
for (y = 0; y < 100; y++){
// make sure we get two random numbers that are different
do {
randomNumber = Math.ceil(Math.random() * 51);
randomNumber2 = Math.ceil(Math.random() * 51);
} while (randomNumber == randomNumber2);
tempCardHolder = cards[randomNumber];
cards[randomNumber] = cards[randomNumber2];
cards[randomNumber2] = tempCardHolder;
}
}
this.deal = function(){
return cards.shift();
}
this.getNumCardsLeft = function(){
return cards.length;
}
}
'Math.ceil(x)的'只會給' 0',如果'-1
2015-02-18 00:47:57
啊,這種類型是不可能的我正在計算的東西。那麼有沒有更好的方法來獲得0-51之間的隨機數? – 2015-02-18 00:50:10
你應該使用'Math.floor(Math.random()* 52)' – Bergi 2015-02-18 00:52:35