如何遍历arrayList

时间:2018-07-19 10:21:19

标签: java arrays list for-loop arraylist

我想创建一个循环访问对象ArrayList的循环。

for (int i = 0,  k=i+1; k < arr.size(); i++) { 
     int tprice;
     tprice=0;
     if (arr.get(i).getID()=arr.get(i+1).getID()) {
        tprice = arr.get(i).getPrice() + arr.get(i+1).getPrice();
     }
     else {
           if (tprice!=0) {
              System.out.println(tprice);
              }
           else {
              System.out.println(arr.get(i).getDuration());
              }
       }
    }

我想比较ArrayList的元素i与元素i+1,而不创建嵌套的for循环,因为我对所有排列都不感兴趣。 (例如,1->2然后2->3,而不是1->2然后1->3

但是,我的代码行总是会导致错误,因为循环末尾的索引k引用了越界索引(或ArrayList的等效索引)。

说我有三个数组:i = 0与i = 1比较,i = 1与i = 2比较,i = 2与i = 3比较,但是由于不存在而抛出错误。

有什么办法可以克服这个问题?看起来很傻,但是我在各个论坛上都找不到任何东西。

大量硬代码:

         arr.add(new object(444,24))  // 444 is ID, 24 is Price
         arr.add(new object(444,29))  // 444 is ID, 29 is Price
         arr.add(new object(121,33))  // ...

想要的结果:

       53
       53
       33

附带问题:如果我要处理相同的ID,理想情况下,我只希望打印一次。反正有这样做吗?

2 个答案:

答案 0 :(得分:1)

如果触摸数组的两个后续元素,则必须先停止一个元素,然后再读取结尾:

for (int i = 0; i < arrayList.size() - 1; i++) {
   // do stuff with arrayList.get(i) and arrayList(i+1)
}

当然,arrayList必须至少包含两个元素,否则将永远不会进入循环,因为arrayList.size() - 1等于0


此外,您将数组与ArrayList<T>混淆。

  • 大小List<T>的{​​{1}}具有方法list.size()list.add(T t)
  • 大小{length)为list.get(int index)的数组int[] array访问索引为array.length的项。

答案 1 :(得分:0)

如果要检查的只是数组中的adjacent个元素,只需从索引1开始直到结尾,然后比较相邻的currentprevious

for (int i = 1; i < arr.size(); ++i) {
    if (arr.get(i) > arr.get(i-1)) ....
}