简体   繁体   中英

How to solve "java.lang.IndexOutOfBoundsException" problem via Agent-based modeling in Anylogic?

I met a problem when I want to assign the parking to each order, and then remove the parking-assined order from other parkings' order sets. This array list arr_assignedOrderSet has a size of 22, so it was supposed to iterate 22 times. But I have no idea why it stoped after 11 times. If I replace the iterated times arr_assignedOrderSet.size() with 22 , it will show me an error of "java.lang.IndexOutOfBoundsException: Index 11 out of bounds for length 11". The codes are as following:

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);
    }

}

There are 22 orders in arr_assignedOrderSet, like this:

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 )]

But when I retrival, the code only runs 11 times, here are the running results:

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

Thanks a lot for your help~ ;-)

Without fully understanding your model, it seems suspicious that 11 is exactly one half of 22, which would mean that this statement: p.orderSet.remove(order); is shrinking the same orderSet being iterated in pop_parkings.get(index).orderSet via arr_assignedOrderSet variable. When this assignment happens arr_assignedOrderSet = pop_parkings.get(index).orderSet; Java isn't actually copying the content of the collection, only the reference to it. If that is the case then the fix is to replace this line:

arr_assignedOrderSet = pop_parkings.get(index).orderSet;

with this line:

arr_assignedOrderSet.addAll(pop_parkings.get(index).orderSet);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM