gpt4 book ai didi

Java Awt Paint方法的变量不一致

转载 作者:行者123 更新时间:2023-11-30 05:09:29 24 4
gpt4 key购买 nike

我不确定出了什么问题,但我的 Paint() 中关于某些变量发生了一些奇怪的情况。

这段代码工作得很好:

public void paint(Graphics g)
{
Point[] positions = {new Point(20,50),new Point(60,30),new Point(80,20),new Point(80,30)};
}

但是这个没有,我想要这个,因为我根据用户的选择改变位置形成:

// declared somewhere
Point[] selectedFormation = {new Point(20,50),new Point(60,30),new Point(80,20),new Point(80,30)};

public void paint(Graphics g)
{
Point[] positions = selectedFormation;
}

最佳答案

当您执行positions = selectedFormation时,您并没有创建selectedFormation的副本,您只是将其引用存储到位置中。两者都指向同一个对象(同一个数组)。如果使用 position 更改数组,则它与 selectedFormation 是相同的数组。
使用clone()创建数组的副本:

public void paint(Graphics g)
{
Point[] positions = selectedFormation.clone();
}

但考虑到clone不会复制数组的元素,两个列表将包含相同的实例。如果仅更改任意点的坐标,则会影响两个列表。在这种情况下,您需要制作列表的深拷贝:

public Point[] deepCopy(Point[] array) {
Point[] copy = new Point[array.length];
for (int i = 0; i < array.length; i++) {
copy[i] = new Point(array[i]);
}
return copy;
}

可以对此进行概括...但让其保持简单

关于Java Awt Paint方法的变量不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3953291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com