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

JavaScript生成不重复随机数并输出最小值?代码问题排查求助

问题排查与修复

原代码的核心问题

  1. 错误的重复判断逻辑:(a==!b)&&(b==!c)完全不符合判断三个数不重复的需求。!b会把数值b转换为布尔值后取反(比如任何非0数字b的!b都是false),数字和布尔值比较永远不成立,导致if块几乎永远不会执行,自然没有输出。
  2. 未循环校验重复:else块只是重新生成一次数值,但没有再次检查是否重复,也没有循环直到生成符合要求的三个数,所以即便重新生成,依然可能重复,且不会触发输出逻辑。

修复方案一:循环校验生成不重复数值

function test() {
  let a, b, c;
  // 循环直到三个数都不重复
  do {
    a = Math.floor(Math.random() * 100 + 1);
    b = Math.floor(Math.random() * 100 + 1);
    c = Math.floor(Math.random() * 100 + 1);
  } while (a === b || b === c || a === c);

  const abc = [a, b, c];
  const minNum = Math.min(...abc);
  console.log(minNum);
}

test();

这个方案通过do...while循环持续生成数值,直到三个数完全不重复,再计算并输出最小值。

修复方案二:从1-100的数组中随机选取三个不重复元素

如果不想用循环重复生成,也可以先创建1到100的数组,再通过随机排序后取前三个元素,确保不重复:

function test() {
  // 生成1到100的数组
  const numbers = Array.from({ length: 100 }, (_, index) => index + 1);
  // 随机打乱数组
  numbers.sort(() => Math.random() - 0.5);
  // 取前三个不重复的数
  const [a, b, c] = numbers.slice(0, 3);
  const minNum = Math.min(a, b, c);
  console.log(minNum);
}

test();

这个方法利用数组排序打乱的方式,直接获取三个不重复的随机数,逻辑更清晰,也避免了循环重复生成的可能。

内容的提问来源于stack exchange,提问作者조혁연

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:32