繁体   English   中英

尝试洗牌时有 1 张牌未定义

[英]1 card is undefined when trying to shuffle deck

我正在尝试使用 html/css/javascript 制作二十一点游戏,但是当我触发我的 shuffleDeck function 时,我牌组中的 1 张牌变得未定义。

谁能解释一下这样做的原因?

在此处输入图像描述

 let cardValues = ["A", 1, 2, 3, 4, 5, 6, 7, 8, 9, "J", "Q", "K"]; let cardSuits = ["hearts", "spades", "clubs", "diamonds"]; let deck = new Array(); let players = new Array(); window.onload = function() { makeDeck(); shuffleDeck(deck); console.log(deck); } function makeDeck() { deck = new Array(); for (let i = 0; i < cardValues.length; i++) { for(let j = 0; j < cardSuits.length; j++) { let weight = parseInt(cardValues[i]);; if (cardValues[i] == "J" || cardValues[i] == "Q" || cardValues[i] == "K") { weight = 10; } else if (cardValues[i] == "A") { weight = 11; } let card = {cardValue: cardValues[i], cardSuit: cardSuits[j], cardWeight: weight} deck.push(card) } } } function shuffleDeck(deck) { for (let i = deck.length; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [deck[i], deck[j]] = [deck[j], deck[i]]; } }

问题在于你的洗牌循环:你let i = deck.length; 并使用i访问卡片组中的卡片 position。 但是当长度为52时,数组go的索引从0到51,所以你把undefined换成卡片。

这是一个非常常见的错误,因为数组索引从 0 而不是 1 开始。

因此,要更正此问题,只需将长度减一,或从 0 开始,而 i<length。

就像很多人已经提到的那样,您的洗牌循环需要从deck.length - 1开始:

function shuffleDeck(deck) {
  for (let i = deck.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [deck[i], deck[j]] = [deck[j], deck[i]];
  }
}

 let cardValues = ["A", 1, 2, 3, 4, 5, 6, 7, 8, 9, "J", "Q", "K"]; let cardSuits = ["hearts", "spades", "clubs", "diamonds"]; let deck = new Array(); let players = new Array(); window.onload = function() { makeDeck(); shuffleDeck(deck); console.log(deck); } function makeDeck() { deck = new Array(); for (let i = 0; i < cardValues.length; i++) { for(let j = 0; j < cardSuits.length; j++) { let weight = parseInt(cardValues[i]);; if (cardValues[i] == "J" || cardValues[i] == "Q" || cardValues[i] == "K") { weight = 10; } else if (cardValues[i] == "A") { weight = 11; } let card = {cardValue: cardValues[i], cardSuit: cardSuits[j], cardWeight: weight} deck.push(card) } } } function shuffleDeck(deck) { for (let i = deck.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [deck[i], deck[j]] = [deck[j], deck[i]]; } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM