【发布时间】:2017-10-29 18:56:19
【问题描述】:
作为一名 Java 新手,我一直在处理 Project Euler 的第 3 题。 (求最大的质因数 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 编译。对于我尝试过的大多数其他值,它没有。
这是为什么呢?更具体地说,错误在哪里?
我能够让它使用“正常”的 for 循环而不是 for each 循环来运行。至少,我猜这是一个幸福的结局。
编辑:通过使用 Sys.out(primeList(9)) 在 main 中评估它,我收到错误消息:
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)
【问题讨论】:
-
你说它不能编译是什么意思?你得到什么错误?
-
你知道“编译”是什么意思吗?
-
更具体地说,错误在哪里?有趣,我正要问你同样的问题。
-
我对这个问题投了反对票,因为“一些错误”不是有用的错误消息。请edit您的问题提供错误消息的确切文本,我会考虑撤回反对票。
-
您意识到 600851475143 不能放入
int,对吧?