JavaScript开发:二十一点算牌游戏switch语句始终匹配首个case求助
解决你的二十一点算牌switch语句问题
嘿,我之前开发卡牌游戏时也踩过switch的坑!你说不管dc或ac取什么值,switch总是匹配第一个case,大概率是下面两个常见问题之一,咱们一步步排查:
1. 忘记在case块末尾加break
这是switch语句最容易犯的错误!如果第一个case执行完后没有break,代码会继续往下执行所有后续的case逻辑,看起来就像只匹配了第一个case。比如你可能写了这样的代码:
// 错误示例:没有break let count = 0; const card = dc; // 假设dc是当前牌值 switch(card) { case 2: case 3: case 4: case 5: case 6: count++; // 执行完这里后,没有break,会继续跑下面的case case 'J': case 'Q': case 'K': case 'A': count--; }
哪怕card是'A',代码也会先执行count++,再执行count--,结果等于没变化,看起来就像匹配了第一个case。正确的写法是在每个逻辑块末尾加break:
// 正确示例:添加break跳出switch let count = 0; const card = dc; switch(card) { case 2: case 3: case 4: case 5: case 6: count++; break; // 关键:执行完加1逻辑后跳出switch case '10': // 别忘了二十一点里的10牌!它也属于减1范畴 case 'J': case 'Q': case 'K': case 'A': count--; break; default: // 处理意外情况,比如无效牌值 console.log('无效牌面'); break; }
2. 变量类型与case值不匹配
如果你的dc/ac是字符串类型(比如从DOM获取的牌面文本是"2"而不是数字2),但case里写的是数字case 2,那两者类型不匹配,switch会找不到匹配的case——但你说总是匹配第一个case,那可能是你第一个case的条件被意外满足?比如如果switch的表达式是true,那第一个case只要是真值就会匹配,但这种情况比较少见。
你可以先打印一下dc和ac的类型确认:
console.log(typeof dc, dc); // 看看是number还是string
如果是字符串,就把case里的数字改成字符串:
case '2': case '3': // ...以此类推
额外提醒:别漏了10牌!
二十一点里的10、J、Q、K都是高价值牌,算牌时都要减1,你原来的逻辑里没提到10,记得补上哦,不然计数会不准。
内容的提问来源于stack exchange,提问作者cliffdog
相关产品推荐
相关产品推荐

