![](/img/trans.png)
[英]How to solve the problem of java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
[英]How to solve "java.lang.IndexOutOfBoundsException" problem via Agent-based modeling in Anylogic?
當我想將停車分配給每個訂單時遇到問題,然后從其他停車的訂單集中刪除停車輔助訂單。 這個數組列表arr_assignedOrderSet的大小為 22,所以它應該迭代 22 次。 但我不知道為什么它在 11 次后停止了。 如果我將迭代時間arr_assignedOrderSet.size()替換為22 ,它將顯示“java.lang.IndexOutOfBoundsException: Index 11 out of bounds for length 11”的錯誤。 代碼如下:
ArrayList<Order> arr_assignedOrderSet = new ArrayList<Order>();
arr_assignedOrderSet = pop_parkings.get(index).orderSet;
for(int i=0; i<arr_assignedOrderSet.size(); i++){
Order order = arr_assignedOrderSet.get(i);
for(int j=0; j<order.col_parking.size(); j++){
Parking p = order.col_parking.get(j);
p.orderSet.remove(order);
}
}
arr_assignedOrderSet 中有 22 個訂單,如下所示:
arr_assignedOrderSet
[root.pop_orders[0]( p_appointedTime = 161.0 ), root.pop_orders[2]( p_appointedTime = 202.0 ),
root.pop_orders[4]( p_appointedTime = 270.0 ), root.pop_orders[7]( p_appointedTime = 27.0 ),
root.pop_orders[13]( p_appointedTime = 143.0 ), root.pop_orders[32]( p_appointedTime = 75.0 ),
root.pop_orders[37]( p_appointedTime = 112.0 ), root.pop_orders[55]( p_appointedTime = 224.0 ),
root.pop_orders[58]( p_appointedTime = 71.0 ), root.pop_orders[84]( p_appointedTime = 181.0 ),
root.pop_orders[1]( p_appointedTime = 240.0 ), root.pop_orders[14]( p_appointedTime = 207.0 ),
root.pop_orders[20]( p_appointedTime = 84.0 ), root.pop_orders[25]( p_appointedTime = 40.0 ),
root.pop_orders[43]( p_appointedTime = 201.0 ), root.pop_orders[47]( p_appointedTime = 212.0 ),
root.pop_orders[54]( p_appointedTime = 254.0 ), root.pop_orders[69]( p_appointedTime = 197.0 ),
root.pop_orders[72]( p_appointedTime = 270.0 ), root.pop_orders[74]( p_appointedTime = 109.0 ),
root.pop_orders[78]( p_appointedTime = 80.0 ), root.pop_orders[79]( p_appointedTime = 287.0 )]
但是當我retrieval時,代碼只運行了11次,下面是運行結果:
orderroot.pop_orders[0]
remove fromroot.pop_parkings[0]
remove fromroot.pop_parkings[1]
i0
orderroot.pop_orders[4]
remove fromroot.pop_parkings[0]
remove fromroot.pop_parkings[1]
i1
orderroot.pop_orders[13]
remove fromroot.pop_parkings[0]
remove fromroot.pop_parkings[1]
i2
orderroot.pop_orders[37]
remove fromroot.pop_parkings[0]
remove fromroot.pop_parkings[1]
i3
orderroot.pop_orders[58]
remove fromroot.pop_parkings[0]
remove fromroot.pop_parkings[1]
i4
orderroot.pop_orders[1]
remove fromroot.pop_parkings[1]
remove fromroot.pop_parkings[2]
i5
orderroot.pop_orders[20]
remove fromroot.pop_parkings[1]
remove fromroot.pop_parkings[2]
i6
orderroot.pop_orders[43]
remove fromroot.pop_parkings[1]
remove fromroot.pop_parkings[2]
i7
orderroot.pop_orders[54]
remove fromroot.pop_parkings[1]
remove fromroot.pop_parkings[2]
i8
orderroot.pop_orders[72]
remove fromroot.pop_parkings[1]
remove fromroot.pop_parkings[2]
i9
orderroot.pop_orders[78]
remove fromroot.pop_parkings[1]
remove fromroot.pop_parkings[2]
i10
非常感謝您的幫助~ ;-)
如果沒有完全理解你的模型,11 正好是 22 的一半似乎很可疑,這意味着這個語句: p.orderSet.remove(order);
正在縮小通過arr_assignedOrderSet
變量在pop_parkings.get(index).orderSet
迭代的相同orderSet
。 當這個分配發生時arr_assignedOrderSet = pop_parkings.get(index).orderSet;
Java 實際上並沒有復制集合的內容,只是復制對它的引用。 如果是這種情況,則修復方法是替換此行:
arr_assignedOrderSet = pop_parkings.get(index).orderSet;
用這一行:
arr_assignedOrderSet.addAll(pop_parkings.get(index).orderSet);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.