Java中自制位置变量的奇怪错误

时间:2017-07-02 17:49:07

标签: java debugging

我的代码中有一个非常奇怪的错误。我以前从未见过。 zkpos.x++;
它发生在这一行。 当zkpos.x被提升一个时,还有另一个变量被一个提升。 这被称为kpos.xkposzkpos是位置变量。

    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++;
        }

}

我希望有人能解决我的奇怪错误。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

这根本不奇怪;这完全正常。

zkpos=kpos;

此行使zkposkpos指向同一个Position对象。对另一个进行的修改将在另一个中看到,因为只有一个位置。

相反,将zkpos设为kpos副本。您必须创建一个 Position对象并将其属性设置为等于kpos。一个常见的策略是制作一个复制构造函数。