使用变量副本时索引越界
Index out of bounds when using an copy of the variable
我无法理解这个问题,所以我希望你们能很好地解释为什么这段代码不起作用。
我的 Warehouse
class 中有 ArrayList
个 Point
。
这段代码工作正常(它在另一个 class 中而不是 Warehouse
):
Point lastPoint = new Point(0, 0);
ArrayList<Point> localPackages = this.warehouse.getPackages();
while(true){
if(localPackages.size() > 0){
lastPoint = this.determineClosest(lastPoint, localPackages);
routeTemp.add(lastPoint);
localPackages.remove(localPackages.indexOf(lastPoint));
}else{
break;
}
}
但是 Warehouse
class 中的包因为被删除而消失了。所以我尝试制作一个变量的副本并在本地使用它,但我对此并不满意。
ArrayList<Point> localPackages = new ArrayList<>(this.warehouse.getPackages());
这是我收到的错误:
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: -1
我在这一行收到错误:
localPackages.remove(localPackages.indexOf(lastPoint));
这是 localPackages
变量的打印:
[
java.awt.Point[x=1,y=1],
java.awt.Point[x=1,y=4],
java.awt.Point[x=2,y=0],
java.awt.Point[x=4,y=3],
java.awt.Point[x=0,y=1],
java.awt.Point[x=0,y=4],
java.awt.Point[x=1,y=0],
java.awt.Point[x=4,y=2]
]
那为什么我在复制变量时得到一个ArrayIndexOutOfBoundsException
,而在我使用原始变量时却没有?
可能 determineClosest
使用的是原始数组,而不是传入的副本。
我无法理解这个问题,所以我希望你们能很好地解释为什么这段代码不起作用。
我的 Warehouse
class 中有 ArrayList
个 Point
。
这段代码工作正常(它在另一个 class 中而不是 Warehouse
):
Point lastPoint = new Point(0, 0);
ArrayList<Point> localPackages = this.warehouse.getPackages();
while(true){
if(localPackages.size() > 0){
lastPoint = this.determineClosest(lastPoint, localPackages);
routeTemp.add(lastPoint);
localPackages.remove(localPackages.indexOf(lastPoint));
}else{
break;
}
}
但是 Warehouse
class 中的包因为被删除而消失了。所以我尝试制作一个变量的副本并在本地使用它,但我对此并不满意。
ArrayList<Point> localPackages = new ArrayList<>(this.warehouse.getPackages());
这是我收到的错误:
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: -1
我在这一行收到错误:
localPackages.remove(localPackages.indexOf(lastPoint));
这是 localPackages
变量的打印:
[
java.awt.Point[x=1,y=1],
java.awt.Point[x=1,y=4],
java.awt.Point[x=2,y=0],
java.awt.Point[x=4,y=3],
java.awt.Point[x=0,y=1],
java.awt.Point[x=0,y=4],
java.awt.Point[x=1,y=0],
java.awt.Point[x=4,y=2]
]
那为什么我在复制变量时得到一个ArrayIndexOutOfBoundsException
,而在我使用原始变量时却没有?
可能 determineClosest
使用的是原始数组,而不是传入的副本。