2 回答

TA贡献1921条经验 获得超9个赞
有一点你应该注意。操作数组时,您应该提及到达最后一个元素时要做什么。在 CS 中,数组计数从 0 开始。在长度为 4 的数组中,最后一个元素的索引为 3 而不是 4。
问题是如果在没有边界检查的情况下进行增量,则您没有检查最后两个情况。这意味着当您返回第一个 if 语句时,有可能出现异常。
另一个问题是 for 循环永远不会结束。
这是消除异常的快速解决方案。您必须注意到程序不会停止。您应该指定一些条件以退出 for 循环。
注意:你最终会得到一个只有爱这个词的巨大数组。
public static ArrayList<String> fix(ArrayList<String> list) {
// write your code here
//loop through array
for (int i = 0; i < list.size();){
//if contains r and not l -remove it
if(list.get(i).contains("r") && !list.get(i).contains("l")){
System.out.println(list.toString());
list.remove(i);
System.out.println(list.toString());
if(i > 0) {i--;}
}
//if contains l and not r - dub entry
if(!list.get(i).contains("r") && list.get(i).contains("l")){
System.out.println(list.toString());
list.add(i, list.get(i));
System.out.println(list.toString());
if(i == list.size()-1) {break;}else {i+=2;}
}
//contains none - do nothing
if(!list.get(i).contains("r") && !list.get(i).contains("l")){
}
//contains both - do nothing
if(list.get(i).contains("r") && list.get(i).contains("l")){
}
}
return list;
}

TA贡献1863条经验 获得超2个赞
由于您要从列表中删除元素,因此列表的大小会递减,并且您正在运行循环直到列表的大小(实际上已经改变),这就是 OutOfIndexException 的原因:)
添加回答
举报