for循环用于从电影列表中删除电影。Loop第一次成功运行,但For循环在删除第二部电影后抛出超出范围的异常。电影列表包含17部电影我已经尝试更改size变量的值以及每次循环时减小size变量的值。public String toString(){
StringBuilder returnString = new StringBuilder();
int newSize = 16;
for (int i = 0; i <newSize ; i++) {
returnString.append(i+1).append("\n");
returnString.append("Movie title: ")
.append(movieList.get(i).getTitle())
.append("\n");
returnString.append("Lead Actor: ")
.append(movieList.get(i).getActor())
.append("\n");
returnString.append("Release Year: ")
.append(movieList.get(i).getYear())
.append("\n");
returnString.append("Genre: ")
.append(movieList.get(i).getGenre())
.append("\n");
}
return returnString.toString();}
2 回答

BIG阳
TA贡献1859条经验 获得超6个赞
如果你用a迭代Iterator
,你也可以只是调用iterator.remove()
删除当前元素,而不需要索引到列表:
public void removeOddValues(List<Integer> list) { for (Iterator<Integer> iter = list.iterator(); iter.hasNext();) { Integer i = iter.next(); if (i % 2 != 0) { iter.remove(); } }}
并非所有数据结构都具有支持的迭代器remove
,但是ArrayList
并且LinkedList
可以。

呼唤远方
TA贡献1856条经验 获得超11个赞
当您删除元素并继续迭代相同的列表时,您必须考虑数据结构如何索引其元素。
你的代码的问题是,当你删除元素2时,第三个元素成为第二个元素。因为,当您从列表中删除元素时,所有后续元素都将转移到其位置。如果您尝试删除倒数第二个元素,您将获得异常。为了摆脱这种麻烦,请尝试向后迭代列表。
for(int i = list.size(); i >= 0; i--) { // do stuff here, like removing}
添加回答
举报
0/150
提交
取消