JS实现两数区间素数筛选始终返回空数组问题排查
素数筛选功能bug修复
已定位的问题点
isNumberPrime函数参数定义错误:接收的参数名写为flag,实际应该接收要判断的数值,且函数内部声明的number变量未赋值,始终为undefined,导致判断逻辑完全失效- 素数判断逻辑错误:原判断条件
(number != 2 || number%2 === 0) || number === 1逻辑错误,会把唯一的偶素数2判定为非素数 - 变量拼写错误:判断整除的分支里将
flag错写为falg,导致变量赋值失效 - 数组方法调用错误:
looping函数里添加元素时写成allPrimes.push[i],push是数组方法,需要用小括号传参,即allPrimes.push(i) - 输入值类型错误:从input获取的
value是字符串类型,未转为数字,循环判断时可能出现类型匹配问题
修复后的代码
JavaScript代码
function isNumberPrime(number) { // 小于等于1的数都不是素数 if (number <= 1) return 0; // 2是唯一的偶素数 if (number === 2) return 1; // 大于2的偶数都不是素数 if (number % 2 === 0) return 0; // 只需要判断到平方根就能覆盖所有因数可能,优化性能 for (let divider = 3; divider <= Math.sqrt(number); divider += 2) { if (number % divider === 0) { return 0; } } return 1; } function looping(lowerNumber, higherNumber) { let allPrimes = []; for (let i = lowerNumber; i <= higherNumber; i++) { if (isNumberPrime(i) == 1){ allPrimes.push(i); } } return allPrimes; } function enterNumbers() { let input1 = document.getElementById("firstNumber"); // 转为数字类型 let lowerNumber = Number(input1.value); let input2 = document.getElementById("secondNumber"); let higherNumber = Number(input2.value); let output = document.getElementById("output"); output.innerText = 'All primes between ' + lowerNumber +' and ' + higherNumber + ' are: [' + looping(lowerNumber, higherNumber) + ']'; } const button = document.querySelector('button'); button.addEventListener('click', enterNumbers)
HTML代码(无需修改)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>Prime numbers</h1> <p>Type first number and second number:</p> <div> <input id="firstNumber" type="number" size="24" /> <input id="secondNumber" type="number" size="24" /> <button>Show primes</button> <br /> <span id="output"></span> </div> <script src="primeNumber.js"></script> </body> </html>
内容的提问来源于stack exchange,提问作者M Alex
相关产品推荐
相关产品推荐

