freeCodeCamp算牌作业变量赋值疑问:我的代码为何无法通过测试?
算牌作业代码无法通过测试的原因
你的代码和参考解法的核心差异,不在于返回值的拼接方式,而在于你修改了全局变量count的类型——这直接导致后续函数调用彻底失效。
问题详细分析:
- 初始时
count是数字类型(值为0)。 - 第一次调用
cc(card)时,switch语句会正确修改count的数字值,之后你执行count += " Bet"或count += " Hold",这会把count从数字变成字符串类型(比如变成"1 Bet"或"-1 Hold")。 - 第二次及之后调用
cc(card)时,switch语句里的count++或count--操作会作用在字符串上:- 字符串无法进行自增/自减运算,JS会把它转换成
NaN(非数字)。 - 之后的
if (count > 0)判断中,NaN和任何值比较都是false,最终返回的结果会是"NaN Hold"这类完全错误的内容。
- 字符串无法进行自增/自减运算,JS会把它转换成
而参考解法中,只是用count的当前数字值去拼接字符串并返回,从未修改全局的count变量——它始终保持数字类型,每次调用都能正确完成计数逻辑。
你的代码:
let count = 0; function cc(card) { switch (card){ case 2: case 3: case 4: case 5: case 6: count++; break; case 10: case 'J': case 'Q': case 'K': case 'A': count--; break; } if (count > 0) { count += " Bet"; } else { count += " Hold"; } return count; }
参考解法:
let count = 0; function cc(card) { // Only change code below this line switch (card) { case 2: case 3: case 4: case 5: case 6: count++; break; case 10: case "J": case "Q": case "K": case "A": count--; break; } if (count > 0) { return count + " Bet"; } else { return count + " Hold"; } }
内容的提问来源于stack exchange,提问作者ethiccwontmiss
相关产品推荐
相关产品推荐

