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

Java实现无isprime()函数的第n个素数,输入超2无输出问题排查

问题分析与修复

核心问题

你的代码输入大于2时无输出,根源是**num_primes变量作用域错误**:

  • 在do-while循环内部定义num_primes,每次循环都会重置为0,随后自增为1,永远只能给primes[1]赋值
  • 当输入的num大于2时,primes[num-1]始终为0,循环条件primes[num - 1] == 0永远成立,程序卡死在无限循环里

此外,is_prime函数存在冗余逻辑,且可以通过减少循环次数优化性能。

修复后的代码

import java.util.Scanner;

class PrimeNumberFinder {
    static boolean is_prime(int number, int[] prime_numbers) {
        if (number <= 1) return false;
        // 只需检查到目标数的平方根,减少无效计算
        double sqrtLimit = Math.sqrt(number);
        for (int primeNumber : prime_numbers) {
            if (primeNumber == 0 || primeNumber > sqrtLimit) break;
            if (number % primeNumber == 0) {
                return false;
            }
        }
        return true;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter the nth prime number you want: ");

        int targetNth = scanner.nextInt();

        int[] primes = new int[targetNth];
        int currentNumber = 2;
        primes[0] = 2;
        // 将计数变量移到循环外,持续记录已找到的素数数量
        int foundPrimesCount = 1;

        if (targetNth > 1) {
            do {
                currentNumber++;
                if (PrimeNumberFinder.is_prime(currentNumber, primes)) {
                    primes[foundPrimesCount] = currentNumber;
                    foundPrimesCount++;
                }
            } while (foundPrimesCount < targetNth);
        }

        System.out.printf("Your Prime number is %d", primes[targetNth - 1]);
        scanner.close();
    }
}

关键修改点

  1. 调整计数变量作用域:把foundPrimesCount(原num_primes)移到循环外,初始值设为1(已存入第一个素数2),每次找到新素数时自增,确保能正确填充数组到目标位置。
  2. 优化循环终止条件:用foundPrimesCount < targetNth替代原数组判断,逻辑更直接,避免未初始化值干扰。
  3. 简化素数判断逻辑:
    • 直接排除小于等于1的数
    • 计算目标数的平方根,素数超过该值时终止循环,减少无效遍历
    • 移除冗余的continue语句,精简代码
  4. 优化变量命名:将num改为targetNth、prime改为currentNumber,提升代码可读性。

内容的提问来源于stack exchange,提问作者Pranshu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:53:31