Java区间质数查找程序运行异常,请求排查问题
区间质数查找程序的问题修复
你的代码核心问题是**factorsCount变量没有在每次检查新数字前重置为0**。这个变量在外层循环外定义,第一次统计完某个数的因数后,数值会被保留,后续检查其他数字时,因数计数会在之前的结果上累加,导致factorsCount == 2的判断条件几乎无法满足,自然不会输出后续的质数。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter first number: "); int numOne = sc.nextInt(); System.out.println("Enter second number: "); int numTwo = sc.nextInt(); // 确保区间起始和结束顺序正确,避免用户输入numOne大于numTwo的情况 int start = Math.min(numOne, numTwo); int end = Math.max(numOne, numTwo); System.out.println("The prime numbers are: "); for (int i = start + 1; i < end; i++) { byte factorsCount = 0; // 每次检查新数字时重置计数 for (int j = 1; j <= i; j++) { if (i % j == 0) { factorsCount++; } } if (factorsCount == 2) { System.out.println(i); } } } }
额外优化建议
- 缩小内层循环范围:判断质数时,不需要遍历到
i本身,只需要遍历到Math.sqrt(i)即可。因为如果i有大于其平方根的因数,必然对应一个小于平方根的因数,这样能大幅减少循环次数,提升效率:
for (int j = 2; j <= Math.sqrt(i); j++) { // 从2开始,1和i本身已默认是因数 if (i % j == 0) { factorsCount++; break; // 找到一个因数就可确定不是质数,直接跳出循环 } } // 质数判断条件改为:无额外因数且数字大于1 if (factorsCount == 0 && i > 1) { System.out.println(i); }
- 处理区间顺序:新增
start和end变量,避免用户输入第一个数大于第二个数时程序逻辑错误。
内容的提问来源于stack exchange,提问作者Abubakar Abdulkadir
相关产品推荐
相关产品推荐

