You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Blackjack游戏时调用shuffleDeck函数出现单张牌undefined问题求助

洗牌函数出现undefined牌的原因及修复

问题根源

你的shuffleDeck函数循环逻辑有误:

  • 循环初始值i = deck.length,但数组的有效索引范围是0到deck.length - 1,此时deck[i]本身就是undefined。
  • 交换操作[deck[i], deck[j]] = [deck[j], deck[i]]会把这个undefined交换到数组的有效索引位置,最终导致牌组中出现无效的undefined牌。

修复方案

使用标准的Fisher-Yates洗牌算法,调整循环的起始索引,确保只操作数组的有效元素:

function shuffleDeck(deck) {
    // 从最后一个有效索引开始遍历
    for (let i = deck.length - 1; i > 0; i--) {
        // 生成0到i之间的随机索引(包含i)
        const j = Math.floor(Math.random() * (i + 1));
        // 交换当前元素和随机选中的元素
        [deck[i], deck[j]] = [deck[j], deck[i]];
    }
}

额外小优化

makeDeck函数里有个多余的分号:let weight = parseInt(cardValues[i]);;,可以去掉一个分号,让代码更整洁。

内容的提问来源于stack exchange,提问作者Thomas Smidt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:15:43