1

Aというクラスがあります。iこのクラスには、文字列名と、この文字列のセッターとゲッターがあります。次のように初期化されているリストもあります。

List<A>myList = ArrayList<A>(SomeOtherList);

ArrayListのサイズを確認すると、リストのサイズが139であることがわかりますが、インデックス6の値を取得しようとすると、次のようになります。

java.lang.IndexOutOfBoundsException: Index: 6, Size: 6.

しかし、forループで0から138までの値を出力しようとすると、例外は発生しません。

String name = myList.get(6).getName(); // Exception

for(int i = 0 ; i < 139 ; i++){
    System.out.println(myList.get(i).getName());
}//will work

誰かがこの問題に遭遇したことがありますか?

forループは139の名前すべてをコンソールに出力しますが、コードがget関数の行に到達すると、フロー例外が発生します。

Caused by: java.lang.IndexOutOfBoundsException: Index: 6, Size: 6
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at com.icap.dashboard.DashboardPage.getSelectionFromCookie(DashboardPage.java:337)
at com.icap.dashboard.DashboardPage.addCCYPanelAndChannels(DashboardPage.java:149)
at com.icap.dashboard.DashboardPage.<init>(DashboardPage.java:107)
... 52 more

私はmavenを使用してプロジェクトをコンパイルします。ArrayListの初期化はコレクションNanesを使用します。

4

2 に答える 2

1

これは機能します:

import java.util.*;

public class StackOverflow {

    public static void main(String[] args) {
        List<A> SomeOtherList = new ArrayList<A>();
        for(int i = 0; i < 139; i++) {
            SomeOtherList.add(new A().setName(String.valueOf(i)));
        }
        List<A> myList = new ArrayList<A>(SomeOtherList);

        System.out.println("random access: " + myList.get(6).getName());

        for(int i = 0 ; i < myList.size() ; i++){
            System.out.println(myList.get(i).getName());
        }

    }

    public static class A {
        String name;

        public A setName(String theName) { this.name = theName; return(this); }
        public String getName() { return(this.name); }
    }
}

この実用的な例をデータで使用してみてください。

于 2012-09-06T14:22:26.260 に答える
0

エラー メッセージはそれ自体を物語っています: 6 つの要素のみを含む配列の要素 6 を取得しようとしています。また、配列のインデックスは 0 から始まるため、例外を発生させずに要求できる最大のインデックスは 5 です。

コードと説明:

String name = myList.get(6).getName(); // Exception

for(int i = 0 ; i < 139 ; i++){
    System.out.println(myList.get(i).getName());
}//will work

呼び出しは単に不可能です

myList.get(6).getName();

forループの中で作られます。あなたが説明しているシナリオが可能であるためには、 myList は2つのケースで異なる必要があります。

于 2012-09-06T14:51:39.163 に答える