Javascript二十一点逻辑

时间:2015-08-28 01:03:20

标签: javascript

我检查卡是否已被使用的逻辑是错误的。

是的,请有人帮帮我。 (卡来自命中功能,只选择一个新的随机功能。)

    function checkCard(card) {
    //if card = card in used array, select new card
    for (i = 0; i <= userCards.length; i++) {
        if (userCards[i] == card) {
            //selectCards(card)
            var newRank = Math.floor(Math.random() * 13);
            var newSuit = Math.floor(Math.random() * 4);
            var card = (rank[newRank] + suit[newSuit]);
            checkCard(card);
            //document.getElementById('userCards').innerHTML += "<td id=" + "UserCard" + "><img src=" + "includes/images/cards/" + card + ".png >";
            //userCards[userCards.length] = card;
            //userTotal();
        } else {
            userCards[userIndex] = card;
            document.getElementById('userCards').innerHTML += "<td id=" + "UserCard" + "><img src=" + "includes/images/cards/" + card + ".png >";
            userTotal();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

在你的for循环中,如果你这样做

i <= userCards.length 

你要越过数组的索引。那应该是:

i < userCards[i].length

另外,我不明白你的基本情况是什么允许你停止递归。您只需创建一些随机卡,调用您的函数,然后检查它是否在使用过的数组中?如果是,则您要制作另一张随机卡,如果您没有将其添加到已使用的阵列中,则调用不带参数的userTotal()。每次以递归方式调用函数时,它都从0开始并再次检查整个数组。

您检查卡片是否已被使用的逻辑,除了超过索引之外,并不是错误的......但是当您在#39之后,您当然会尝试使用这些信息。 ;发现它似乎不对。

尝试更详细地解释您正在尝试做的事情。

答案 1 :(得分:0)

您缺少一份退货声明。如果必须使用递归,请尝试以下逻辑:

function checkCard(card)
{    //if card = card in used array, select new card
    for (i = 0; i < userCards.length; i++)
    {
            if (userCards[i] == card)
            {   //selectCards(card)
                var newRank = Math.floor(Math.random() * 13);
                var newSuit = Math.floor(Math.random() * 4);
                var card = (rank[newRank] + suit[newSuit]);
                checkCard(card);
            return;  // new card was assigned in recursive call above
            }
   }
   // card is unused, assign now
   userCards[userCards.length] = card;
   document.getElementById('userCards').innerHTML += "<td id=" + "UserCard" + "><img src=" + "includes/images/cards/" + card + ".png >";
   userTotal();
   return;      // new card was assigned here.
}