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

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();}


慕少森
浏览 612回答 2
2回答

BIG阳

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

呼唤远方

当您删除元素并继续迭代相同的列表时,您必须考虑数据结构如何索引其元素。你的代码的问题是,当你删除元素2时,第三个元素成为第二个元素。因为,当您从列表中删除元素时,所有后续元素都将转移到其位置。如果您尝试删除倒数第二个元素,您将获得异常。为了摆脱这种麻烦,请尝试向后迭代列表。for(int&nbsp;i&nbsp;=&nbsp;list.size();&nbsp;i&nbsp;>=&nbsp;0;&nbsp;i--)&nbsp;{ &nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;stuff&nbsp;here,&nbsp;like&nbsp;removing}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java