繁体   English   中英

Java方法返回相同类的对象

[英]Java method returns an object of the same class

我的以下代码有问题:

public class Board {
    private int[][] blocks;
    private  int dim;
    private int hDistance;
    private int mDistance;
    private int indexRow;//row of the empty block;
    private int indexColumn;//column of the empty block;

    public Board(int[][] blocks)                                             
    {       
       dim = blocks.length;
       this.blocks = new int[dim][dim];
       this.blocks = blocks;
       mDistance = manhattan();
       hDistance = hamming();   
    }

    public Board twin()                    
    {
       Board twinBoard = this;

       if(indexRow!=0)
       {
          exch(twinBoard.blocks, 0, 0, 0, 1);//swap(twinBoard.blocks[0][0] with twinBoard.blocks[0][1] 
       }
       else
       {
          exch(twinBoard.blocks, 1, 0, 1, 1);//swap(twinBoard.blocks[1][0] with twinBoard.blocks[1][1] 
       }
       return twinBoard;        
    }
    private void exch(int[][] blocks, int i1, int j1, int i2, int j2)
    {
       int temp;
       temp = blocks[i1][j1];
       blocks[i1][j1] = blocks[i2][j2];
       blocks[i2][j2] = temp;
    }
    public static void main(String[] args)
    {

       int[][] a = {
                {2,0,4},
                {1,5,7},
                {3,6,8}
                };

       Board board1 = new Board(a);
       Board board2 = board1.twin();
    }
}

打印出我得到的board1.blocks

2,0,4

5,1,7

3,6,8

代替

2,0,4

1,5,7

3,6,8

board1.blocks如何交换的? 而且如何只交换board2.block ,而board1.block与以前一样?

问题在这条线上:

Board twinBoard = this;

您的代码的“双板”是不是不同的板:它是相同的板为this ,所以所做的任何更改twinBoard反映在this也。

要解决此问题,请定义一个新的构造函数以复制电路板:

private Board(Board other) {
    ...
}

在此构造函数中,您需要复制board ,并将hDistancemDistance和其他字段设置为其在other一块电路板上的值。 现在,您可以使用此构造函数制作一个双板:

Board twinBoard = new Board(this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM