Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在while循环中使用foreach循环会出现错误?_Java_Eclipse_For Loop_Collections - Fatal编程技术网

Java 为什么在while循环中使用foreach循环会出现错误?

Java 为什么在while循环中使用foreach循环会出现错误?,java,eclipse,for-loop,collections,Java,Eclipse,For Loop,Collections,我为Euler项目的问题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:

我为Euler项目的问题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]))
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));
    }
}
我的Java程序的代码是:

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]))
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));
    }
}

编辑:代码错误,我最初使用的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);
         }
     }
}
for(ListIterator ListIterator=primes.ListIterator();ListIterator.hasNext();){
int i=listIterator.next();
如果(否%i!=0){
no2=no2+1;
if(primes.size()==no2){
System.out.println(primes.get(primes.size()-1));
添加(否);
}
}
}

首先,我假设循环的正确语法是(inti: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);
         }
     }
}
for(ListIterator ListIterator=primes.ListIterator();ListIterator.hasNext();){
int i=listIterator.next();
如果(否%i!=0){
no2=no2+1;
if(primes.size()==no2){
System.out.println(primes.get(primes.size()-1));
添加(否);
}
}
}

您不得在enchaned
for
循环(或任何其他循环)中修改
集合

您不得在enchaned
for
循环(或任何其他循环)中修改
集合
foreach循环将使用
迭代器来遍历列表,禁止您尝试使用
素数进行更改。添加(否)

由于您的列表是一个
ArrayList
,您可以使用
primes.get(i)
和size by
primes.size()
访问
i-th
元素,而无需额外费用。一个简单的解决方法是:

for (int idx = 0; idx < primes.size(); idx++){
    int i = primes.get(idx);
    if (no % i != 0) {
        no2 = no2 + 1;
        if(primes.size() == no2){
            System.out.println(primes.get(primes.size() - 1));
            primes.add(no);
        }
    }
}
for(int-idx=0;idx
foreach
循环将使用一个
迭代器来遍历您的列表,禁止您尝试使用
素数进行更改。添加(否)

由于您的列表是一个
ArrayList
,您可以使用
primes.get(i)
和size by
primes.size()
访问
i-th
元素,而无需额外费用。一个简单的解决方法是:

for (int idx = 0; idx < primes.size(); idx++){
    int i = primes.get(idx);
    if (no % i != 0) {
        no2 = no2 + 1;
        if(primes.size() == no2){
            System.out.println(primes.get(primes.size() - 1));
            primes.add(no);
        }
    }
}
for(int-idx=0;idx
您使用的是哪个版本的Java?这真的是Java代码吗?@A4L我认为是Java 8及其“lambdas”(他们更喜欢它而不是未签名的支持(sight))我不确定您是否在显式复制代码,但您得到的错误是因为您在使用for-each循环遍历列表时添加到列表中。请使用典型的
for(int-iter=0;iter
format,您不会得到错误。您使用的是哪一版本的Java?这真的是Java代码吗?@A4L我认为这是Java 8及其“lambdas”(他们更喜欢它而不是未签名的支持(sight))我不确定您是否在显式复制代码,但您得到的错误是因为您在使用for-each循环遍历列表时将其添加到列表中。使用典型的
for(int-iter=0;iter
将不会得到错误。啊,很抱歉,这是for(int-I:primes)循环的原始代码{啊,对不起,这是(int i:primes)循环的原始代码{是的,我知道,看看底部的编辑。我试过你的代码,它成功了。非常感谢!Comarki。是的,我知道,看看底部的编辑。我试过你的代码,它成功了。非常感谢!Comarki。