Java质因数列表生成返回多结果问题求助
你的质因数分解程序问题分析与修复方案
嘿,刚接触编程和Stack Overflow的话别担心,这个问题其实挺常见的,咱们一步步来理清楚~
核心问题所在
你把primelist定义成了类的成员变量,这就意味着每次调用findPrime方法时,这个列表不会自动清空,而是会把新的因数继续追加到之前的结果里。比如第一次调用得到[2,5],第二次调用时列表已经保留了这两个元素,再添加新的因数就会出现重复或多余的内容,也就是你看到的[2,5,5]。
另外从代码片段的逻辑来看,你应该是打算递归处理分解后的剩余数字,但成员变量的列表会在递归过程中不断累加,导致结果混乱。
修复后的代码示例
把列表改成方法内的局部变量,并调整递归逻辑,就能解决问题:
public class Solution { ArrayList<Integer> findPrime(int num) { // 把列表定义为方法局部变量,每次调用都会新建空列表 ArrayList<Integer> primelist = new ArrayList<>(); for (int i = 2; i <= num; i++) { if (num % i == 0) { primelist.add(i); // 递归处理分解后的剩余数字,并合并结果 primelist.addAll(findPrime(num / i)); // 找到最小质因数后跳出循环,避免重复遍历 break; } } return primelist; } }
关键修正点解释
- 局部变量替代成员变量:每次调用
findPrime都会创建全新的空列表,彻底避免了之前调用的结果残留。 - 添加
break语句:找到能整除当前num的最小i(也就是质因数)后,立刻跳出循环,因为我们只需要分解这个质因数,剩下的交给递归处理,否则会继续遍历更大的i,导致重复添加无关因数。 - 递归结果合并:用
addAll把递归返回的子质因数列表合并到当前列表,保证最终返回的是完整的质因数分解结果。
测试验证
调用findPrime(10)时:
- 第一次循环i=2,10%2==0,添加2到列表,然后递归调用
findPrime(5)。 - 在递归调用中,i遍历到5时,5%5==0,添加5到列表,返回
[5]。 - 原方法把
[5]合并到当前列表,得到[2,5]并返回,结果正确。
内容的提问来源于stack exchange,提问作者mendokusai
相关产品推荐
相关产品推荐

