gpt4 book ai didi

java - ArrayList 中的内容被修改

转载 作者:行者123 更新时间:2023-12-01 07:14:39 25 4
gpt4 key购买 nike

我正在制作的程序遇到问题,老实说我找不到解决方案。似乎 Java ArrayList 集合中包含的对象正在被修改,而无需我对此类修改进行编程。

整个程序基本上是通过移动路径来在 10x10 网格上的两个节点之间创建随机连接。该路径表示为网格中点的 ArrayList 集合,第一个索引包含第一个节点的位置(节点 A),最后一个索引包含第二个节点的位置(节点 B)。我的做法是将自己定位在 A 的位置,然后随机移动到网格中的连续点,在 while 循环中重复此操作,直到到达 B 的位置。

一切似乎都有效,除了“路径”集合以某种方式改变,使得其中的每个点最终都与我移动到的最后一个点相同,这也是 B 的位置。

方法如下:

public void generateRandomPath()
{
path = new ArrayList<Point>();
path.add(pInitial);
complete = false;

while(!complete)
{
k = path.get(path.size()-1);
d = selectDirection(k);

GUI.log.append("==== Before the method. ==== \n");
GUI.log.append(Integer.toString(path.get(path.size()-1).getX())+" - "+Integer.toString(path.get(path.size()-1).getY())+"\n");

x = move(k, d);
path.add(x);

if(k.getX() == pEnd.getX() && k.getY() == pEnd.getY())
complete = true;

}
GUI.log.append("Finished. \n");
}
  • ”只是点,带有 X和 Y 坐标表示为整数。
  • pInitial”是代表节点A位置的点。
  • pEnd”是代表节点B位置的点。
  • d”是我在这次重复中前进的方向。可以是向上、向右、向下或向左,分别用整数 1、2、3 和 4 表示。
  • k”是路径中的最后一个点,也是上一次重复时移动到的点。
  • x”是当前重复移动到的新点。

所以它基本上所做的就是捕获路径中的最后一个点作为引用,选择一个方向,然后移动到该方向上相邻的点。每次重复 while 循环都应向路径添加一个新的。然而最终发生的情况是,不仅添加了这个新点,而且路径中已有的所有其他都采用了最后添加的点的值。通过利用上面显示的日志条目(GUI.log.append),我设法看到路径在该步骤中被神秘地更改:

x = move(k, d);

下面的方法是:

private Point move(Point n, int y)
{
GUI.log.append("==== Inside the method. ==== \n");
GUI.log.append(Integer.toString(path.get(path.size()-1).getX())+" - "+Integer.toString(path.get(path.size()-1).getY())+"\n");

Point newP = n;
if(y == 1)
newP.setY(n.getY()-1);
if(y == 2)
newP.setX(n.getX()+1);
if(y == 3)
newP.setY(n.getY()+1);
if(y == 4)
newP.setX(n.getX()-1);

GUI.log.append("==== After method. ==== \n");
GUI.log.append(Integer.toString(path.get(path.size()-1).getX())+" - "+Integer.toString(path.get(path.size()-1).getY())+"\n");

return newP;
}

整数y是前面提到的方向。正如您所看到的,此方法不会以任何方式改变路径,但日志显示它确实如此。在此示例中,节点 A 位于 X = 2、Y = 3 上。日志显示路径中最后一个的坐标是。正如您所看到的,路径中最后一个点的坐标采用新的坐标值,但是这个新尚未添加到路径

Example of the alteration of path.

老实说,我不知道这是怎么发生的。如果有人能想到一个原因,如果你能告诉我,我将非常感激。

最佳答案

尝试

Point newP = new Point(n.getX(), n.getY());

而不是

 Point newP = n;

关于java - ArrayList 中的内容被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708673/

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