java - 使用 for 循环从列表中删除电影。For循环工作一次然后抛出索引超出范围异常
问题描述
for 循环旨在从电影列表中删除电影。循环第一次成功运行,但是一旦删除第二部电影,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();
}
解决方案
如果您使用 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
, butArrayList
和LinkedList
do 的迭代器。
推荐阅读
- java - 在录制摄像机 api android 时覆盖 [PNG] 图像
- xaml - Xamarin 子框架在父角半径上溢出
- python - 将元组列表附加到现有字典中
- javascript - Angular 高级表达式绑定
- java - 通过 Internet 的服务器客户端通信 (Java)
- authentication - 使用 JavaMail 使用 IMAP 协议读取邮件时出现 AuthenticationError
- rx-java2 - rx-java2 异常处理
- angular - 将异步可观察数据从父组件发送到子组件
- ios - UIView 自动布局约束 wrt 父级
- arrays - 在Scala中获取参数列表中的数组长度