簡體   English   中英

如何在 Anylogic 中通過基於代理的建模解決“java.lang.IndexOutOfBoundsException”問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM