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)
컴파일하지 않는다는 것은 무엇을 의미합니까? 어떤 오류가 발생합니까? –
"컴파일"이란 무엇을 의미합니까? –
* 더 구체적으로, 어디서 오류가 나옵니까? * 재밌네, 나는 너에게 똑같은 질문을하려고했다. – shmosel