0

ユーザー入力を受け取り、印刷と削除の目的でカウンターをインクリメントするコードがあります。リンクされたリストと現在の位置の間のカウントの違いを確認するために、いくつかの印刷行を追加しました。これが得られたものです。

Enter a command from the list above (q to quit): 
2
Deleted: e                e                5                $5.0
 Current record is now first record.
4
5
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
        at java.util.LinkedList.entry(LinkedList.java:365)
        at java.util.LinkedList.get(LinkedList.java:315)
        at bankdata.command(bankdata.java:158)
        at bankdata.main(bankdata.java:314)
Java Result: 1
BUILD SUCCESSFUL (total time: 18 seconds)

コマンド 2、remove current node コマンドを入力します。現在のノードは、技術的には 0 ~ 4 を意味するサイズ 5 のリンク リストの最後のノードです。

このコードを実行するとどうなりますか:

//currentAccount is a static int that was created at the start of my code.
//It got it's size because the int is saved every time a new node is made.
//The most recent size correlates with the last position in the linked list.
            int altefucseyegiv = accountRecords.size();
            System.out.println("Deleted: " + accountRecords.get(currentAccount)
                    + "\n Current record is now first record.");
            System.out.println(currentAccount);
            System.out.println(accountRecords.size());
            accountRecords.remove(currentAccount);
            System.out.println("Deleted: " + accountRecords.get(currentAccount)
                    + "\n Current record is now first record.");
            if(altefucseyegiv == 1)
            {
                currentAccount = -1;
            }
            else
            {
                currentAccount = 0;
            }
            records.currentAcc(currentAccount, accountRecords);
            return;

このエラーが発生します???

よくわかりません!.get(4)th を削除しているため、つまり 5 番目の要素を削除しているだけであり、愛を意味するわけではありません。誰かが説明して、これを修正するのを手伝ってもらえますか?

4

3 に答える 3

4

IOFB 例外は、行によってスローされます

System.out.println("Deleted: " + accountRecords.get(currentAccount)
                + "\n Current record is now first record.");

5 番目の要素を削除したので、表示する 5 番目の要素はありません (配列の位置は 0 から始まることに注意してください)。

于 2013-03-28T11:54:57.413 に答える
3

試す

Object obj = accountRecords.remove(currentAccount);
System.out.println("Deleted: " + obj + "\n Current record is now first record.");

currentAccountとして初期化されaccountRecords.size() - 1、 5 つのノードがあると仮定していますaccountRecords

次にcurrentAccount値4を持ち、リストから4番目の要素を削除して、accountRecords4つの要素のみを残します。

次に、要素が 4 つしかなく、有効な要素インデックスがでaccountRecords.get(4)あるリストからフェッチしようとしています。そのため、エラーが発生しています。accountRecords0..3

于 2013-03-28T11:55:32.377 に答える
1

あなたの間違いはprintlnだと思います:

System.out.println("Deleted: " + accountRecords.get(currentAccount)
                + "\n Current record is now first record.");

<- リストの最後のエントリを削除したため、IndexOutOfBoundsException が発生しましたか、それとも間違っていますか? System.out.println("Deleted: " + accountRecords.get
(currentAccount-1) + "\n 現在のレコードが最初のレコードになりました。");

于 2013-03-28T11:53:53.067 に答える