我想创建一个坐标类,当我实例化这个类时,它会自动构建它的6个相邻坐标,但是,当我这样做时,我总是遇到stackoverflow问题,而且我没有很好的方法来解决它。这是我的错误代码,你可以很容易地看到问题,构造函数本身包含它自己。所以我想知道如何解决这个问题
public class Coordinate {
private final int x;
private final int y;
private final Coordinate[] periperal;
/**
* The default constructor for Coordinate class that
* sets up the coordinate to the given integers.
*
* @param x value of x coordinate
* @param y value of y coordinate
*/
public Coordinate(){
final Coordinate adjacent1 = new Coordinate(x, y + 1);
final Coordinate adjacent2 = new Coordinate(x, y - 1);
final Coordinate adjacent3 = new Coordinate(x - 1, y + 1);
final Coordinate adjacent4 = new Coordinate(x - 1, y);
final Coordinate adjacent5 = new Coordinate(x + 1, y);
final Coordinate adjacent6 = new Coordinate(x + 1, y - 1);
Coordinate[] list = {adjacent1, adjacent1, adjacent1, adjacent1, adjacent1, adjacent1};
periperal = list;
}
我知道为什么我错了,但我不知道如何解决。有人可以帮助我吗?非常感谢。
最佳答案
构造函数中的第一行递归且无条件地创建另一个实例。实际上,这是一个调用自身的方法。
您需要一些条件来阻止此递归永远进行(或者更确切地说,直到您耗尽堆栈)。
为整个(无限)坐标系中的每个坐标创建一个实例是行不通的。您确定需要邻居坐标吗?我想,当/如果确实需要它们时,它们可以在稍后进行动态计算。
关于java - 类如何在作为构造函数时构建其其他实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14474668/