Javascript shift()总是返回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.floor
四舍五入您的数字。对于所包括的范围,一定要乘比所需的最大值
这里较大的一个是包容性的终点
一个随机整数生成器的例子function random_int(max, min) {
min = min || 0;
return min + Math.floor(Math.random() * (max - min + 1));
}
'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