У меня есть колода карт, которая по существу просто заполняет массив колоды 0-51 (52 карты), а затем перетасовывает карты. У меня есть метод card.deal(), который возвращает карту. Когда я использую cards.pop(), я всегда получаю другое число, что и ожидалось; однако, когда я использовал cards.shift(), он всегда возвращает 0. Я доволен использованием pop, но просто хотел бы понять для учебных целей, почему я всегда получаю 0, когда использую shift. Я изменил количество перетасовки на огромные цифры, например, 10 000, чтобы убедиться, что он перетасовки достаточно, чтобы фактически заменить первый элемент в массиве. Может ли быть возможно, что метод Math.ceil не возвращает 0, даже после 10000 случайных чисел, сгенерированных между 0 и 51? Что здесь происходит?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 (х)' даст только ' 0', если '-1
ах, это добро о том, что я понял. Так есть ли лучший способ получить случайное число между 0-51 включительно? –
Вы должны использовать 'Math.floor (Math.random() * 52)' – Bergi