JavaScript生成不重复随机数并输出最小值?代码问题排查求助
问题排查与修复
原代码的核心问题
- 错误的重复判断逻辑:
(a==!b)&&(b==!c)完全不符合判断三个数不重复的需求。!b会把数值b转换为布尔值后取反(比如任何非0数字b的!b都是false),数字和布尔值比较永远不成立,导致if块几乎永远不会执行,自然没有输出。 - 未循环校验重复:
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,提问作者조혁연
相关产品推荐
相关产品推荐

