我无法从具有此格式的文件中编译此程序(其中" Via"是意大利语" road")
Via Emilia - > Via Botti
通过Castello - > Via Emilia
Via Appia - > Via Botti
Via Botti - > Via Emilia
通过Castello - > Via Amendola
Via Appia - > Via Ancona
通过Castello - > Via Botti
通过Matteotti - > Via Carso
Via Ancona - > Via Matteotti
Via Carso - > Via Matteotti
并且在第三个问题上要求我找到哪些道路是递归的(如a-> b和b-> a),但是当我尝试设置条件以消除重复答案的可能性时(像a和b是递归的,b和a是递归的)我得到这个错误" java.util.ConcurrentModificationException",这是什么意思?
这是主要的
public static void main(String[] args) throws Exception{
ArrayList<percorso> perc = new ArrayList<percorso>();
String line;
BufferedReader br = new BufferedReader(new FileReader("vie.txt"));
while ((line = br.readLine())!=null){
percorso p = new percorso (null,null);
String [] e = line.split("-->");
p.from = e[0];
p.to = e[1];
perc.add(p);
}
br.close();
//punto1(perc);
//punto2(perc);
punto3(perc);
}
这是在第三个问题上编译答案的方法
public static void punto3(ArrayList<percorso> perc) throws Exception{
BufferedWriter bw=new BufferedWriter(new FileWriter("3.html"));
bw.write("<html> \n <body> \n");
bw.write("<h1> Punto 3 </h1> \n");
bw.write("<h3><i> Trovare le coppie di strade che formano un anello chiuso </h3></i> \n");
ArrayList<percorso> perc2 = new ArrayList<percorso>();
for (percorso k: perc)
perc2.add(k);
ArrayList<String[]> Arr = new ArrayList<String[]>();
for (percorso i: perc2){
for (percorso j: perc2){
if (i.from.equals(j.to) && i.to.equals(j.from)){
String [] e = {i.from,i.to};
Arr.add(e);
}
}
}
ArrayList<String[]> Arr2 = new ArrayList<String[]>();
for (String [] z: Arr){
Arr2.add(z);}
for (String [] f: Arr){
for (String [] j: Arr2){
if (f[0].equals(j[1]) && j[0].equals(f[1]))
Arr.remove(j);
}
}
for (String [] x: Arr)
bw.write("le vie "+x[0]+", "+x[1]+" formano un anello chiuso <br>");
bw.write("</body> \n </html> \n");
bw.close();
}
percorso课程如下
public class percorso {
String from;
String to;
public percorso (String from,String to){
this.from = from;
this.to = to;
}
}
答案 0 :(得分:0)
您正在尝试在循环播放时从arraylist中删除记录:Arr.remove(j)。 这会导致ConcurrentModificationException。
您可以将其添加到单独的列表中(例如valuesToRemove),而不是在循环时将其从arraylist中删除。这将保留您要删除的所有记录,然后在循环后调用Arr.removeAll(valuesToRemove);
答案 1 :(得分:0)
所以问题是你使用的是Arr.remove(j);在for循环中,你不能这样做。
而且这个 Iterating through a Collection, avoiding ConcurrentModificationException when removing in loop
但基本上,你要做的是使用迭代器去除元素,例如:
j <- c(1,3,5,7,9,11,13,15,17,19,21,23)
k <- 1
for (i in j){
lines(x = c(AAx[i:(i+1),1]), y = c(AAx[i:(i+1),2]))
text(AAx[i,1],AAx[i,2], names[k], pos = 3)
k <- k+1
}