2017-10-29 1 views
-6

Project Euler 문제 03을 Java 초보자로 작업했습니다. (600851475143의 가장 큰 소수 요소를 찾는다.) ArrayLists를 처음 사용했을 때 약간의 혼란이 생겼다.Java Integer ArrayList

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에 대해 컴파일합니다. 시도한 다른 값들에 대해서는 그렇지 않습니다.

왜 그럴까요? 그리고 더 구체적으로, 어디서 오류가 있습니까?

나는 for-loop 대신 for-loop를 실행할 수있었습니다. 적어도 행복한 끝이었습니다.

편집이 : 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) 
+0

컴파일하지 않는다는 것은 무엇을 의미합니까? 어떤 오류가 발생합니까? –

+0

"컴파일"이란 무엇을 의미합니까? –

+0

* 더 구체적으로, 어디서 오류가 나옵니까? * 재밌네, 나는 너에게 똑같은 질문을하려고했다. – shmosel

답변