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)

我的程序得到一个对象列表,我需要在列表中找到等于一然后打印它,这是代码

    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()编号更改您的编号从 0 开始而不是从 1。

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 语句返回 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++;
    }

并作为上述答案 - 从int j=0

如果你只想打印最后一个元素,你可以使用oneid.size()-1而不是变量。

于 2012-06-28T14:43:37.930 回答