【问题标题】:Java Integer ArrayList [closed]Java Integer ArrayList [关闭]
【发布时间】: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,对吧?

标签: java arraylist integer


【解决方案1】:

您正在尝试从列表中删除您当前正在迭代的项目,因此发生 ConcurentModicationException。

请看这里:https://stackoverflow.com/a/18448699/8851887

【讨论】:

    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多