Java 从ArrayList访问区域边界时<;面积>;在初始化它的类之外,收到的矩形不正确
我已经研究过这个代码很多次了,但似乎无法理解它的行为 我向for循环中的Java 从ArrayList访问区域边界时<;面积>;在初始化它的类之外,收到的矩形不正确,java,arraylist,awt,area,bounds,Java,Arraylist,Awt,Area,Bounds,我已经研究过这个代码很多次了,但似乎无法理解它的行为 我向for循环中的ArrayList中添加了大量Area实例,同时还创建了另一个Area,它是所有添加到数组中的实例的合并(但是该合并的ArrayList) 当试图从另一个类中检索ArrayList的第一项时,它给出了合并的区域的边界,该区域在第一个位置从未添加过 import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Rectangle2D; import
ArrayList
中添加了大量Area
实例,同时还创建了另一个Area
,它是所有添加到数组中的实例的合并(但是该合并的ArrayList
)
当试图从另一个类中检索ArrayList
的第一项时,它给出了合并的区域的边界,该区域在第一个位置从未添加过
import java.awt.Shape;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
public class CorruptArray {
public ArrayList<Area> arrayList = new ArrayList<Area>();
public CorruptArray(){
double x = 100.0;
double y = 200.0;
double width = 100.0;
double height = 200.0;
Area map = null;
int i = 5;
for(int j =0 ; j<i; j++){
arrayList.add(new Area(new Rectangle2D.Double(x,y,width,height)));
x+=10;
y+=10;
width+=10;
height+=10;
}
int k = 0;
for(Area area : arrayList){
System.out.println("INITIAL BOUNDS ON ENTRY: " + area.getBounds().toString());
if(k == 0){
map = area;
k++;
}else{
map.add(area);
}
System.out.println("OVERALL JOINED AREA - map " + map.getBounds().toString() + "\n");
}
TestArray test = new TestArray(this);
}
private static class TestArray{
TestArray(CorruptArray ca){
System.out.println("\n\n");
for(Area area : ca.arrayList){
System.out.println("RETRIVAL OF BOUNDS FROM TestArray: " + area.getBounds().toString());
}
}
}
public static void main(String args[]){
new CorruptArray();
}
不添加合并区域,但从arraylist中获取第一个区域并对其进行修改。就发生在这里:
if (k == 0) {
map = area;
稍后,将列表中的其他区域添加到地图中,这是列表中的第一个区域。您可能希望根据列表中的第一个区域创建新区域:
if (k == 0) {
map = new Area(area);
不添加合并区域,但从arraylist中获取第一个区域并对其进行修改。就发生在这里:
if (k == 0) {
map = area;
稍后,将列表中的其他区域添加到地图中,这是列表中的第一个区域。您可能希望根据列表中的第一个区域创建新区域:
if (k == 0) {
map = new Area(area);
我认为只有在我声明area=map
时这才是一个问题,即使如此,如果我转到列表中的其他项,为什么我随后对map进行的调整会影响ArrayList
中的第一个区域?您已经将第一个area
对象的引用复制到map
变量。map
和列表中的第一个条目(arraylist.get(0)
)和map.getBounds()
和arraylist.getBounds()现在引用了arraylist
区域的单个实例
从同一区域获取边界。我认为只有当我声明area=map
时,这才是一个问题,即使如此,如果我转移到列表中的其他项目,为什么后续对map的调整会影响ArrayList
中的第一个区域?您已将第一个area
对象的引用复制到map
变量。map
现在引用了Area
的一个实例,列表中的第一个条目(arraylist.get(0)
)和map.getBounds()
从同一区域获取边界。