JavaScript代码求助:如何移除数组中的非整数因数对?
问题修复:输出整数因数相乘数对
原代码的核心问题是没做整除判断,且循环从0开始导致除以0出现Infinity,同时存在变量重复声明、循环逻辑混乱的问题。以下是具体错误点、修正方案及代码:
原代码的关键错误
- 循环
iterator从0开始,numInput / 0会产生Infinity,完全不符合需求,iterator应从1开始遍历 - 未判断
numInput能否被iterator整除,导致出现小数数对 - while循环内重复声明
numInput和valueArray,第一次输入直接被覆盖,逻辑混乱 - 注释描述错误,需求是乘法组合而非加法(additive)
修正后的代码
// 先获取有效输入:大于1的整数 let numInput; do { numInput = parseInt(prompt("请输入一个大于1的整数")); // 处理无效输入:非数字、小于等于1的情况 if (isNaN(numInput) || numInput <= 1) { if (numInput === null) { // 用户取消输入时退出 console.log("已退出"); break; } alert("请输入大于1的有效整数!"); } } while (isNaN(numInput) || numInput <= 1); if (numInput && numInput > 1) { const factorPairs = []; // 遍历到平方根即可,减少循环次数,避免重复处理数对 for (let i = 1; i <= Math.sqrt(numInput); i++) { // 整除判断:确保两个因数都是整数 if (numInput % i === 0) { const pair1 = `(${i}, ${numInput / i})`; factorPairs.push(pair1); // 非平方数时,添加反向数对 if (i !== numInput / i) { const pair2 = `(${numInput / i}, ${i})`; factorPairs.push(pair2); } } } console.log("相乘等于该数的整数对:" + factorPairs.join("")); }
修正说明
- 输入校验:用do-while循环强制用户输入有效整数,同时处理取消输入的场景
- 循环优化:遍历到目标数的平方根,减少不必要的循环次数
- 整数判断:通过
numInput % i === 0确保两个因数都是整数 - 去重处理:遇到平方数(如4)时,只保留一组(2,2),避免重复输出
- 变量规范:用let/const代替var,避免变量提升导致的逻辑混乱
测试输入7时,控制台会输出:相乘等于该数的整数对:(1, 7)(7, 1),完全符合预期。
内容的提问来源于stack exchange,提问作者YourStupidCodeReviwer
相关产品推荐
相关产品推荐

