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

JavaScript while循环多条件实现骰子游戏的代码问题排查

问题排查结论

你的代码核心bug是while循环的逻辑运算符使用错误,直接导致死循环:
当前判断条件为dice != numb1 || dice != numb2 || dice != numb3 || dice != numb4,该逻辑永远返回真:

  • 或逻辑(||)的规则是只要任意一个子条件为真,整个判断就为真
  • 哪怕骰子掷中了终止值2,此时dice != 2为假,但dice !=3、dice !=6、dice !=12均为真,整个循环条件依然成立,程序会永远运行下去
  • 单条件判断时因为没有其他或分支,所以可以正常终止,和你观察到的现象完全一致

除此之外代码还有两个小问题:

  • 投掷次数初始值设为1错误:第一次投掷是进入循环后才执行的,初始值应为0,否则最终统计的次数会比实际多1次
  • 随机数生成逻辑不符合真实骰子概率:Math.floor(Math.random() * 11) + 2会让2-12的每个点数出现概率均等,但真实两枚六面骰子掷出和为7的概率是和为2的6倍,需要分别生成两个1-6的随机数求和才符合规则
修复后可直接运行的代码
function play() {
  var dice = -1;
  var rolls = 0;
  // 未命中任意终止值时持续投掷
  while (dice != 2 && dice != 3 && dice != 6 && dice != 12) {
    // 模拟两枚独立六面骰子
    var die1 = Math.floor(Math.random() * 6) + 1;
    var die2 = Math.floor(Math.random() * 6) + 1;
    dice = die1 + die2;
    rolls++;
  }

  document.getElementById('results').innerHTML = 'Your dice landed on: ' + dice;
  document.getElementById('rolls').innerHTML = 'Rolls: ' + rolls;
}
逻辑说明
  • 循环判断将||替换为&&(与逻辑):只有当骰子点数同时不等于四个终止值时,才会继续循环;命中任意一个终止值时,循环条件立刻不成立,退出循环输出结果
  • 投掷计数从0开始累加,每完成一次投掷计数+1,最终结果和实际投掷次数完全匹配
  • 分开生成两个骰子的点数再求和,符合真实掷骰子的概率分布

内容的提问来源于stack exchange,提问作者sansievar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:00:58