FreeCodeCamp算牌挑战代码求助:两组测试用例未通过
问题分析与修复
你的代码未通过测试的核心原因是错误地将返回"Bet"/"Hold"的逻辑与当前卡牌类型绑定,而非依据count的正负值判断。FreeCodeCamp算牌挑战的规则是:
- 当
count > 0时,返回"[count] Bet" - 当
count ≤ 0时,返回"[count] Hold"
返回结果只和当前累计的count有关,和当前处理的卡牌类型无关。
测试用例失败原因
以未通过的两组测试为例:
- 卡牌序列2, J, 9, 2, 7
处理到最后一张牌7时,count已累计为1(正),但你的代码因当前牌是7,直接返回"1 Hold",违反了count>0需返回Bet的规则。 - 卡牌序列2, 2, 10
处理到最后一张牌10时,count累计为1(正),但你的代码因当前牌是10,直接返回"1 Hold",同样不符合规则。
修复后的代码
let count = 0; function cc(card) { // 仅更新count值 if (card >= 2 && card <= 6) { count += 1; } else if (card === 7 || card === 8 || card === 9) { // 7-9不改变count,无需操作 } else if (card === 10 || card === 'J' || card === 'Q' || card === 'K' || card === 'A') { count -= 1; } // 根据count统一判断返回结果 return count > 0 ? `${count} Bet` : `${count} Hold`; } // 测试调用 cc(2); cc(3); cc(7); cc('K'); cc('A');
修复说明
- 将更新count和返回结果的逻辑拆分:先处理卡牌对count的影响,再统一根据count的正负返回对应指令。
- 移除了原代码中每个卡牌分支内的
return语句,确保count能被正确累计更新后再判断结果。 - 使用三元运算符简化了结果判断的逻辑,也可换成
if-else写法,效果一致。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

