[英]Why do I get an error with a foreach loop inside a while loop?
我為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]))
我的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);
}
}
}
foreach
循環將使用Iterator
遍歷您的列表,並禁止使用primes.add(no)
進行更改。
由於您的列表是ArrayList
,因此可以使用primes.get(i)
和primes.size()
通過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
循環中(或與此相關的任何其他內容)修改Collection
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.