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

时间:2013-04-08 17:41:00

标签: 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)

我通过在我的开关/案例中选择选项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;
}

在我的主课堂上:

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

使用列表读入.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   

1 个答案:

答案 0 :(得分:10)

问题是:

for (int x = 0; x <= DVDlist.size(); x++) { ... }

您必须将其更改为

for (int x = 0; x < DVDlist.size(); x++) { ... }

原因是列表中的第一项不是索引1而是0. 索引从0开始Lists (like Java arrays) are zero based

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

的原因
java.lang.IndexOutOfBoundsException: Index: 4, Size: 4

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

0,1,2,3 --> COUNT = 4 // it starting from 0 not 1