JS黑杰克HiLo算牌函数疑问:else语句中card['card '+i]+i的+i作用
问题解答
你看到的card['card ' + i] + i里的+i完全是代码编写时的错误,没有任何符合HiLo算牌规则的逻辑意义,正是这个多余的写法导致了计数结果不准确。
为什么不该加i
- 首先看输入的卡牌数组结构:数组的第
i个元素是单个卡牌对象,它的唯一键就是'card ' + i,card['card ' + i]已经可以正确取出当前卡牌的面值,完全不需要额外加循环变量i。 - 原代码的判断逻辑完全被多余的
+i打乱:比如当i=3时,面值为8的牌加3后变成11,会被误判为>=10的牌,导致多减1分,完全不符合HiLo规则。
修复后的正确代码
只需要把else if分支里两处多余的+i删掉即可,为了代码可读性更高还可以把面值单独提取为变量:
function cardCounter(array) { var count = 0; for (var i = 0; i < array.length; i++) { var card = array[i]; // 取出当前卡牌面值 var cardValue = card['card ' + i]; if (cardValue >= 2 && cardValue <= 6) { count++; } else if (cardValue >= 10 || cardValue === 'face or ace') { count--; } // 7、8、9不做处理,计0分 } return count; }
修复后验证
跑两个测试用例结果完全符合预期:
- 第一个用例:2(+1)、6(+1)、8(0)、人脸牌(-1),总和为
1,和预期值一致 - 第二个用例:人脸牌(-1)、9(0)、8(0)、人脸牌(-1),总和为
-2,和预期值一致
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

