Java 为什么在while循环中使用foreach循环会出现错误?
我为Euler项目的问题7编写的快速程序不断产生错误 我不熟悉Java。我将问题7的Python代码转换成Java,只是想看看我是否能做到这一点。我正在自学Java,以便在游戏中领先 我的Python程序的代码是: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:
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));
添加(否);
}
}
}
您不得在enchanedfor
循环(或任何其他循环)中修改集合
您不得在enchanedfor
循环(或任何其他循环)中修改集合
foreach循环将使用迭代器来遍历列表,禁止您尝试使用素数进行更改。添加(否)
由于您的列表是一个ArrayList
,您可以使用primes.get(i)
和size byprimes.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 byprimes.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。