最大质因数查找器while循环后代码不执行问题排查求助
最大质因数查找器循环后代码未执行问题排查
问题现象
开发的最大质因数查找器中,while循环结束后的打印语句始终无法执行。以输入45为例,控制台输出到9 is not a prime factor后直接退出程序,循环收尾的打印代码完全没有运行。
代码问题分析
核心问题出在质数检查的for循环逻辑中:
当处理因数9时,j遍历到3时触发9%3==0的判断,此时代码执行了return -1——这个return会直接终止整个getLargestPrime方法,导致while循环后续的迭代、循环结束后的打印语句完全没有执行机会。
修复方案
将for循环内的return -1改为仅跳出当前质数检查循环即可,我们只需要标记当前因数非质数,不需要终止整个方法。可以通过添加标记变量或直接break来实现。
修改后的代码示例
public class LargestPrime { public static int getLargestPrime(int number) { if(number <=1){ return -1; } int largestPrime = 0; int factor = 0; int i =1; while(i < number) { i++; factor = number % i; if (factor == 0) { int primeCheck = i; System.out.println(i + " is a factor of " + number); boolean isPrime = true; // 修正偶数判断:2是质数,需单独排除 if(primeCheck % 2 == 0 && primeCheck != 2){ System.out.println(primeCheck + " is not a prime factor"); continue; } // 优化质数检查:遍历到平方根即可,减少循环次数 for(int j = 2; j <= Math.sqrt(primeCheck); j++){ if(primeCheck % j == 0){ System.out.println(primeCheck + " is not a prime factor"); isPrime = false; break; } } if(isPrime){ largestPrime = primeCheck; System.out.println(primeCheck + " is a prime factor"); } } } System.out.println("loop has ended"); System.out.println(largestPrime + " is the largest prime factor"); return largestPrime; } }
关键修改说明
- 用
isPrime标记变量替代return -1,发现非质数时仅跳出当前质数检查循环,不终止整个方法 - 优化质数检查逻辑:遍历到
Math.sqrt(primeCheck)即可,大幅减少循环迭代次数 - 修正偶数判断逻辑:避免误判2为非质数
测试结果
输入45时,控制台会完整输出循环结束的打印语句,最终正确输出最大质因数5。
内容的提问来源于stack exchange,提问作者Anthony Collins
相关产品推荐
相关产品推荐

