You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:14:58