![](/img/trans.png)
[英]is it safe to pass object of same class, as parameter, to a method of same class in 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
,并将hDistance
, mDistance
和其他字段设置为其在other
一块电路板上的值。 现在,您可以使用此构造函数制作一个双板:
Board twinBoard = new Board(this);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.