首页 > 解决方案 > 使用 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();
}

标签: javafor-looptostring

解决方案


如果您使用 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, butArrayListLinkedListdo 的迭代器。


推荐阅读