如何从3位数获得最大素数

时间:2017-10-23 09:33:50

标签: java

我试图得到最大的素数,从3位数到100到999 但我的代码让我错误

public static void main(String[] args) {

        int i ,counter;
        //int arr[] = null;
        ArrayList<Integer> arr = new ArrayList<Integer>();
        for(counter=101 ; counter <999;counter++){
            boolean check = true ;
            for(i=2;i<counter;i++){             
                if(counter%i == 0){
                    check = false;
                    break;
                }

            }
            if(check){

                for(int index = 0;index<=arr.size();index++){
                    arr.add(counter);
                }
        }

        }


        System.out.println(arr.get(arr.size()-1));
        }

我将数字放在数组列表中并尝试获取最后一个数字索引

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.grow(Unknown Source)
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at Prime.main(Prime.java:23)

问题是什么?抱歉英语不好

4 个答案:

答案 0 :(得分:5)

问题是由于以下代码段造成的。

for(int index = 0;index<=arr.size();index++){
    arr.add(counter);
}

它将无限循环并导致在数组中添加如此多的对象,因此会出现OutOfMemory。

我认为这部分不需要for循环,即将其更改为

arr.add(counter);

代替。

答案 1 :(得分:3)

第二个for循环不是必需的并且保持循环。 最高数字从999开始并向下计数。 然后第一个结果是最后一个结果。

    for (int counter = 999; counter >= 100; --counter) {
        boolean check = true ;
        for (int i = 2; i < counter/2; i++) {             
            if (counter%i == 0) {
                check = false;
                break;
            }
        }
        if (check) {
            System.out.println(counter);
            break;
        }
    }

答案 2 :(得分:0)

您可能不需要上一个for

for(int index = 0;index<=arr.size();index++){
  arr.add(counter);
}

而不是那样,您可以添加素数:

if(check){
  arr.add(counter);
}

并在外面打印:

for(int i = 0; i<arr.size(); i++){
  System.out.println(arr.get(i);
}

答案 3 :(得分:0)

public static void main(String[] args) {

        int i, counter;
        Integer greatestPrime = null;
        //int arr[] = null;
        /*ArrayList<Integer> arr = new ArrayList<Integer>();*/
        for (counter = 101; counter < 999; counter++) {
            boolean isPrime = true;
            for (i = 2; i < counter; i++) {
                if (counter % i == 0) {
                    isPrime = false;
                    break;
                }

            }
            if (isPrime) {
                /*for(int index = 0;index<=arr.size();index++){
                    arr.add(counter);
                }*/
                greatestPrime = counter;
            }

        }

        System.out.println(greatestPrime);
    }