使用for循环向数组存入数字求GCF时,数组仅存0的问题排查
排查你的最大公约数函数数组问题
看起来你遇到了一个很典型的数组赋值/逻辑问题,循环跑了12次但数组里只有0,大概率是下面几个原因之一:
1. 因数判断逻辑写反了
你可能在判断“是否为公约数”的时候搞反了取余的对象,比如如果你的代码是这样的:
function calculateGCF(num) { let storage = []; for(let i = 0; i <= 12; i++) { // 错误:应该是 num % i === 0,而非 i % num === 0 if(i % num === 0) { storage.push(i); } } alert(storage); }
如果传入的num比12大,那i % num的结果永远等于i本身,只有当i=0时满足0 % num === 0,所以数组里只会有0。
2. 数组变量被循环意外重置
如果你的storage数组是在循环内部声明的,那每次循环都会重新创建一个空数组,最后只会保留最后一次循环推入的值(也就是0):
function calculateGCF(num) { for(let i = 0; i <= 12; i++) { // 错误:每次循环都重新初始化数组 let storage = []; if(num % i === 0) { storage.push(i); } } alert(storage); }
这种情况一定要把数组声明放在循环外面,确保整个循环共用同一个数组。
3. 循环起始值踩了0的坑
如果你的循环从0开始,num % 0会返回NaN,要是你的判断条件误把这种情况当成了“符合要求”,就只会把0塞进数组。正常找因数应该从1开始循环,避开0作为除数的问题:
// 正确:从1开始遍历 for(let i = 1; i <= num; i++) { if(num % i === 0) { storage.push(i); } }
你可以先对照自己的代码检查这几个点,如果还是找不到问题,把完整代码贴出来,我再帮你细查~
内容的提问来源于stack exchange,提问作者user7400006
相关产品推荐
相关产品推荐

