我的代码中有一个非常奇怪的错误。我以前从未见过。
zkpos.x++;
它发生在这一行。
当zkpos.x
被提升一个时,还有另一个变量被一个提升。
这被称为kpos.x
。
kpos
和zkpos
是位置变量。
public class Position {
int x, y;
public Position(int nx, int ny)
{x=nx;
y=ny;}}
完整的代码就是这个。
while(c<z.mRange)
{
kpos.y=kpos.y - 1;
tpos[index]=kpos;
//System.out.println("tpos["+index+"]: " +tpos[index].x+", "+tpos[index].y);
c++;
index++;
zc = c;
zkpos=kpos;
while(zc<z.mRange)
{
//System.out.println();
//System.out.println(kpos.x);
zkpos.x++;
//System.out.println(kpos.x);
tpos[index]=zkpos;
//System.out.println("tpos["+index+"]: " +tpos[index].x+", "+tpos[index].y+ " "+kpos.x);
index++;
zc++;
}
}
我希望有人能解决我的奇怪错误。 谢谢你的帮助。
答案 0 :(得分:4)
这根本不奇怪;这完全正常。
zkpos=kpos;
此行使zkpos
和kpos
指向同一个Position
对象。对另一个进行的修改将在另一个中看到,因为只有一个位置。
相反,将zkpos
设为kpos
的副本。您必须创建一个新 Position
对象并将其属性设置为等于kpos
。一个常见的策略是制作一个复制构造函数。