第10001个素数是什么?为什么我的Java解决方案会给出错误ArrayIndexOutOfBoundsException?

第10001个素数是什么?为什么我的Java解决方案会给出错误ArrayIndexOutOfBoundsException?,java,error-handling,primes,Java,Error Handling,Primes,这是我为Euler#7项目编写的Java代码(代码中注释的问题描述): 当我按下数组索引OutofBoundsException错误时,它给出了这样一个“查找为什么'j'可能是10001”。当我按下按钮时,我得到的是: 素数[j]=i;Main.Main(字符串[])(过滤器:10001) 我不明白这意味着什么,这对我也没有什么帮助。 我的代码可能有什么问题?如果您的for(long i=2;i

这是我为Euler#7项目编写的Java代码(代码中注释的问题描述):

当我按下数组索引OutofBoundsException错误时,它给出了这样一个“查找为什么'j'可能是10001”。当我按下按钮时,我得到的是:

素数[j]=i;Main.Main(字符串[])(过滤器:10001)

我不明白这意味着什么,这对我也没有什么帮助。 我的代码可能有什么问题?

如果您的
for(long i=2;i<10000000000000l;i++)
发现的素数超过10001个,则您的外部循环条件将无法及时检查以完成程序

你应该合并这些循环

改变

while (j < 10001){
    for (long i = 2; i < 1000000000000000L; i++) {
输出:

104743

除了Eran的答案之外:基本测试循环不工作<代码>for(long k=i;k永远不会执行,因为
k
是用
i
初始化的,因此条件
k
总是错误的Java数组从0开始到长度-1。这确实有效,但它实际上给出了第10000个素数,而不是第100001个素数。我在自己的代码中发现了这个错误,我对您的解决方案所做的一些更改也发现了k=I的错误;因为我%k总是返回true,bool isPrime总是false,但不知何故我删除了我自己的comment@Vasila_M事实上,这不是我代码中的错误。素数[10000]应该包含第10001个素数(因为素数[0]包含第一个素数)。错误在于内部循环认为4是素数。唯一需要的修复是(长k=2;k)的

while (j < 10001){
    for (long i = 2; i < 1000000000000000L; i++) {
for (long i = 2; i < 1000000000000000L && j < 10001; i++) {
long [] primes = new long[10001];
int j = 0;
for (long i = 2; i < 1000000000000000L && j < 10001; i++) {
    boolean isPrime = true;
    for (long k = 2; k <= i / 2; k++) {
        if (i % k == 0) {
            isPrime = false;
            break;
        }
    }
    if (isPrime) {
        primes[j] = i;
        j++;
    }

}
System.out.println(primes[10000]);
104743