我想创建一个循环访问对象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,理想情况下,我只希望打印一次。反正有这样做吗?
答案 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)
。list.get(int index)
的数组int[] array
访问索引为array.length
的项。答案 1 :(得分:0)
如果要检查的只是数组中的adjacent
个元素,只需从索引1
开始直到结尾,然后比较相邻的current
和previous
。
for (int i = 1; i < arr.size(); ++i) {
if (arr.get(i) > arr.get(i-1)) ....
}