2
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」と入力すると、正常に削除されます。その後、メニューが再び繰り返され、「Mystic River」を削除するためにもう一度 4 を選択します。それも正常に削除されます。メニューが再び繰り返され、再び 4 を選択します。今度は「Mystic Rivers」と入力すると ('s' を付けて、その DVD がリストにないことをテストします)、そのエラーが表示されます。関連するコードと、読んでいる .txt リストを含めました。

.txt ファイルからの情報を ArrayList に入力しています。各 DVD オブジェクトには 5 つの情報があります。そして、各ピースは1つの別々のラインです。

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   
4

1 に答える 1

10

問題はこれです:

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

に変更する必要があります

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

理由は、リストの最初の項目がインデックス 1 ではなく 0 にあるためです。インデックスは 0 から始まりますリスト (Java 配列など) はゼロベースです。

リストに10個のアイテムがある場合、最後のアイテムは10ではなく9の位置にあります。これが使用できない理由です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
于 2013-04-08T17:42:17.477 に答える