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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:06