为什么我会收到此异常错误?

tra*_*ama 2 java exception

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at assg3_Tram.DVDCollection.remove(DVDCollection.java:60)
at assg3_Tram.DVDApplication.main(DVDApplication.java:95)
Run Code Online (Sandbox Code Playgroud)

我通过在我的开关/案例中选择选项4(从列表中删除DVD对象)来启动我的程序.然后我输入"Adam",成功删除.然后菜单再次重复,我再次选择4以删除"神秘河".这也成功地删除了.菜单再次重复,我再次选择4.这次我输入"Mystic Rivers"(用's'来测试DVD不在列表中),然后弹出错误.我已经包含了相关代码和我正在阅读的.txt列表.

我使用.txt文件中的信息填充ArrayList.每个DVD对象有5条信息.每件作品都是一条独立的线.

public DVD remove(String removeTitle) {
    for (int x = 0; x <= DVDlist.size(); x++) {
        if (DVDlist.get(x).GetTitle().equalsIgnoreCase(removeTitle)) { // This is line 60.
            DVD tempDVD = DVDlist.get(x);
            DVDlist.remove(x);
            System.out.println("The selected DVD was removed from the collection.");
            wasModified = true;
            return tempDVD;
        }
    }

    System.out.println("DVD does not exist in the current collection\n");
    wasModified = false;
    return null;
}
Run Code Online (Sandbox Code Playgroud)

在我的主班:

        case 4: {
            System.out.print("Enter a DVD title you want to remove: ");
            kbd.nextLine();
            String titleToRemove = kbd.nextLine();
            DVD dvdToRemove = dc.remove(titleToRemove); // This is line 95
            if (dvdToRemove != null) 
                System.out.println(dvdToRemove);
            System.out.print("\n");
            break;
        }   
Run Code Online (Sandbox Code Playgroud)

读入带有列表的.txt文件.

Adam
Documentary
78 minutes
2012
7.99
Choo Choo
Documentary
60 minutes
2006
11.99
Good Morning America
Documentary
80 minutes
2010
9.99
Life is Beautiful
Drama
125 minutes
1999
15.99
Morning Bird
Comic
150 minutes
2008
17.99
Mystic River
Mystery
130 minutes
2002
24.99   
Run Code Online (Sandbox Code Playgroud)

Sim*_*iak 10

问题是这样的:

for (int x = 0; x <= DVDlist.size(); x++) { ... }
Run Code Online (Sandbox Code Playgroud)

你必须把它改成

for (int x = 0; x < DVDlist.size(); x++) { ... }
Run Code Online (Sandbox Code Playgroud)

原因是列表中的第一项不是索引1而是0. 索引从0开始.列表(如Java数组)基于零.

如果您的列表有10个项目,则最后一个项目位于第9位而不是10.这就是您无法使用的原因 x <= DVDlist.size()

java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
Run Code Online (Sandbox Code Playgroud)

这意味着我所说的.您的列表有4个元素,但最后一个元素位于位置3,即大小 - 1

0,1,2,3 --> COUNT = 4 // it starting from 0 not 1
Run Code Online (Sandbox Code Playgroud)