我检查一张卡是否已经被使用的逻辑是错误的。
有人能帮帮我吗。(卡片来自一个命中函数,它只是选择一个新的随机函数)。
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();
}
}
}发布于 2015-08-30 03:00:24
您缺少了一条返回语句。如果必须使用递归,请尝试以下逻辑:
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.
}发布于 2015-08-30 02:32:00
在for循环中,如果您这样做了
i <= userCards.length 您将通过数组的索引。这应该是:
i < userCards[i].length另外,我不明白你的基本情况是什么,允许你停止递归。您只是创建一些随机的卡片,回忆您的函数,然后检查它是否在使用的数组中?如果是的话,您将制作另一个随机卡,如果不是,则将其添加到使用的数组中,然后调用不带参数的userTotal()。每次递归调用函数时,它都从0开始,并再次检查整个数组。
您的逻辑是检查是否已经使用了一张卡,而不是经过索引,这是没有错的。但当然,一旦你发现信息似乎是错的,你想要做的是什么。
试着更详细地解释你想要做的事情。
https://stackoverflow.com/questions/32261797
复制相似问题