java - 为什么在 while 循环中使用 foreach 循环会出错?

标签 java eclipse for-loop collections

我为欧拉计划第 7 题做的快速程序一直出错。

我不熟悉 Java。我将问题 7 的 Python 代码转移到 Java 中,只是想看看我是否能做到。我正在自学 Java 以领先于游戏。

我的 Python 程序的代码是:

no = 2
print(3 % 2)
primes = [2]
while len(primes) != 10001:
    no = no + 1
    no2 = 0
    for each in primes:
        if no % each != 0:
            no2 = no2 + 1
            if len(primes) == no2:
                print(primes[-1])
                primes.append(no)
print("Final answer is: " + str(primes[-1]))

我的 Java 程序的代码是:

import java.util.ArrayList;
import java.util.List;

public class P7Euler {

    public static void main(String[] args) {
        int no = 2;
        int no2 = 0;
        List<Integer> primes = new ArrayList<Integer>();
        primes.add(2);
        while (primes.size() != 20){
            no = no + 1;
            no2 = 0;
            for(int i : primes){
                if(no % i != 0){
                    no2 = no2 + 1;
                    if(primes.size() == no2){
                        System.out.println(primes.get(primes.size() - 1));
                        primes.add(no);
                    }
                }

            }
        }
        System.out.println("The final answer is: " + primes.get(primes.size() - 1));
    }
}

错误信息:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
    at java.util.ArrayList$Itr.next(Unknown Source)
    at Test1.examples.P7Euler.main(P7Euler.java:16)

编辑:代码错误,我原来使用的 for 循环现在在那里。

最佳答案

首先,我假设循环的正确语法是 for(int i : primes){

您不能在使用 foreach 循环遍历元素时修改列表。尝试在迭代时使用 java.util.ListIterator 添加到列表:

for (ListIterator<Integer> listIterator = primes.listIterator(); listIterator.hasNext();) {
     int i = listIterator.next();
     if(no % i != 0){
         no2 = no2 + 1;
         if(primes.size() == no2){
              System.out.println(primes.get(primes.size() - 1));
              listIterator.add(no);
         }
     }
}

关于java - 为什么在 while 循环中使用 foreach 循环会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045951/

相关文章:

java - 如何让自己跟上构建 Java Web 应用程序的速度

java - 如何在 Java 中返回 5 个随机的 "Powerball"数字

c - 函数内的数组

Java string.equals(string) 没有按预期运行

java - 如何在java中制作实时消息或字符计数器

java - 你可以在一个 Hibernate Session 中有多个事务吗?

java - Java ClassLoader 是否加载内部类?

java - 如何从 List<Object> (Java) 获取数据?

java - 如何在 Eclipse 中运行单个 JUnit 测试方法?

java - JDK、Eclipse 和路径变量