我检查卡是否已被使用的逻辑是错误的。
是的,请有人帮帮我。 (卡来自命中功能,只选择一个新的随机功能。) 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();
}
}
}
答案 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.
}