为了账号安全,请及时绑定邮箱和手机立即绑定

使用for循环从列表中删除电影。For循环工作一次然后抛出索引越界异常

使用for循环从列表中删除电影。For循环工作一次然后抛出索引越界异常

慕少森 2019-04-18 19:15:00
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可以。


查看完整回答
反对 回复 2019-05-15
?
呼唤远方

TA贡献1856条经验 获得超11个赞

当您删除元素并继续迭代相同的列表时,您必须考虑数据结构如何索引其元素。

你的代码的问题是,当你删除元素2时,第三个元素成为第二个元素。因为,当您从列表中删除元素时,所有后续元素都将转移到其位置。如果您尝试删除倒数第二个元素,您将获得异常。为了摆脱这种麻烦,请尝试向后迭代列表。

for(int i = list.size(); i >= 0; i--) {
   // do stuff here, like removing}


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 611 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号