Java Integer ArrayList [закрыто]

Я работаю над проблемой 03 Project Euler в качестве новичка Java. (Найдите самый большой основной коэффициент 600851475143.) Это был мой первый раз, когда я использовал ArrayLists, и появилось несколько недоразумений - надеюсь, их можно будет очистить!

public static ArrayList<Integer> primeList (int n){
    ArrayList<Integer> prime = new ArrayList<Integer> ();
    for (int i = 2; i <= n; i++) {
        prime.add(i);
    }

    // Sieb des Eratosthenes
    for (int i = 2; i <= Math.sqrt(n); i++) {
        for (Integer j : prime) {
            if (j > i && j % i == 0) {
                prime.remove (Integer.valueOf(j)); // some error.
            }
        }
    }

    return prime;
}

Это мой код для Сито Эратосфена . Вероятно, это не очень оптимально, я знаю, что - я все равно продолжу работу по оптимизации моего алгоритма.

Однако меня действительно беспокоит то, что этот не компилируется. Так или иначе, он компилируется для n = 2, 3, 5. Для большинства других значений, которые я пробовал, это не так.

Почему это? А точнее, где ошибка?

Я смог заставить его работать с «нормальным» циклом, а не для каждого цикла. Это был счастливый конец, по крайней мере, я думаю.

EDIT: оценив его в основном с Sys.out(primeList(9)), я получаю сообщение об ошибке:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:907)
    at java.util.ArrayList$Itr.next(ArrayList.java:857)
    at problem03.TestPrime.primeList(TestPrime.java:18)
    at problem03.TestPrime.main(TestPrime.java:7)

java,arraylist,integer,

-6
Яндекс.Метрика