0

次のエラーが返される問題があります

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 1
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at graphsshahar.TestDijkstra.main(TestDijkstra.java:38)

私のプログラムはオブジェクトのリストを取得し、リストで1に等しいものを見つけて印刷する必要があります。コードは次のとおりです

    public static void main (String [] args){
    System.out.println("begin");

    int one = 2;
    int two = 10;
    List<Conniction> tempDeal = ConnictionDAO.getInstance().findPath(one, two);

    List<String> oneid = new ArrayList<String>();
    List<String> twoid = new ArrayList<String>();

    for (int j = 1; j <= tempDeal.size(); j++) {
     System.out.println("get");
        if( Integer.parseInt(tempDeal.get(j).getOneid()) == one ) 
        {
            oneid.add(tempDeal.get(j).getOneid());
            System.out.println(oneid.get(j));

        }

    }
    System.out.println("end");

何を修正すればよいですか?if文のどこが悪いのかわからない

4

5 に答える 5

5

このj < tempDeal.size()ナンバリングは 1 からではなく 0 から始まります。

for (int j = 0; j < tempDeal.size(); j++) { ... }

使用j = 1すると、0 の位置でアイテムを取得できなくなります。


更新: @AVD を意味するようなイテレータも使用できます。

for(Conniction member: tempDeal) {
   // do work
}
于 2012-06-28T14:27:54.463 に答える
4
for (int j = 1; j < tempDeal.size(); j++) 

意図的でない場合、「j」は「0」から開始する必要があります

for (int j = 0; j < tempDeal.size(); j++) 

リストのインデックスは「0」から始まります

于 2012-06-28T14:27:29.630 に答える
2

インデックスが重要でない場合は、イテレータループforを使用できます。

for(Conniction obj: tempDeal){
    if(obj!=null) {
       if(Integer.parseInt(obj.getOneid())==one){
            oneid.add(obj.getOneid());
        }
     }
}
于 2012-06-28T14:35:05.217 に答える
0

これを変える :

for (int j = 0; j < tempDeal.size(); j++) {

リストのインデックスは0で始まり、size()-1で終わります。

于 2012-06-28T14:30:03.733 に答える
0

oneid配列には別のカウンターが必要です。if ステートメントが 1 回 false を返した場合、次にここに入力すると、IndexOutOfBounds が返されます。

int oneIdCount = 0;

そしてそれをインクリメントしますif

if( Integer.parseInt(tempDeal.get(j).getOneid()) == one ) 
    {
        oneid.add(tempDeal.get(j).getOneid());
        System.out.println(oneid.get(oneIdCount));
        oneIdCount++;
    }

上記の回答のように、 for from を開始しますint j=0

最後の要素のみを出力したい場合はoneid.size()-1、変数の代わりに使用できます。

于 2012-06-28T14:43:37.930 に答える