-1

当我想将停车分配给每个订单,然后从其他停车的订单集中删除停车分配订单时,我遇到了一个问题。这个数组列表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);
    }

}

非常感谢您的帮助~ ;-)

4

1 回答 1

0

在不完全理解您的模型的情况下,11 恰好是 22 的一半似乎很可疑,这意味着该语句:p.orderSet.remove(order);正在缩小通过变量orderSet迭代的相同内容。当这个赋值发生时,Java 实际上并没有复制集合的内容,只是对它的引用。如果是这种情况,那么解决方法是替换此行:pop_parkings.get(index).orderSetarr_assignedOrderSetarr_assignedOrderSet = pop_parkings.get(index).orderSet;

arr_assignedOrderSet = pop_parkings.get(index).orderSet;

用这条线:

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

于 2021-11-16T12:03:40.133 回答