java - 类如何在作为构造函数时构建其其他实例

标签 java stack-overflow

我想创建一个坐标类,当我实例化这个类时,它会自动构建它的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/

相关文章:

hadoop - 了解 stackoverflow 底层软件基础设施

c++ - 堆栈溢出 C++

c# - 如何使用 {} 而不是 ; 自行设置属性?

c# - 追踪我的 LINQ 查询中的堆栈溢出错误

java - 返回 SQL SELECT 查询等于行数

java - 使用Java时小数位数太多?

java - 如何在Java中获取VKontakte的授权码?

java - 调试我的按钮

python - 如何在 Python 中获得堆栈溢出错误?

java - idea intellij maven项目无法制作