项目欧拉需要帮助

时间:2015-07-23 10:38:28

标签: java

此代码用于查找第1001个素数:

public class problem7 {

  public static void main(String[] args) {
    int[] myarray = new int[1001];
    int j = 0;
    boolean prime = false;

    for(int i = 2;;i++){
        for(int k = 2;k <i; k++){
            if(i== (k-1) && i % k != 0){
                prime = true;
            }

            if (i % k == 0){
                prime = false;
                prime = true;
            }
            if (prime){
                myarray[j] = i;
            }
            if(j==1000){
                System.out.println(myarray[1000]);
            }
            j++;
        }
    }
  }
}

它告诉我我的数组已经超出界限。不知道为什么。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

要解决此特定问题,您必须在找到所需的号码后停止代码(在打印找到的值后通过return):

if(j==1000){
    System.out.println(myarray[1000]);
    return;
}

这样可以避免下次拨打j++;以及下次拨打ArrayIndexOutOfBoundsExceptionmyarray[j] = i;。{/ p>

答案 1 :(得分:0)

完成后

        if(j==1000){ //if j is 1000
            System.out.println(myarray[1000]);
        }
        j++; // now j is 1001

你没有停止执行。在下一次迭代中,您正在尝试

        if (prime){
            myarray[j] = i; // your j is 10001
        }

因此,要么从两个循环中断,要么在打印myarray[1000]后返回。