Java 为什么我必须在堆栈中两次将top初始化为-1?

Java 为什么我必须在堆栈中两次将top初始化为-1?,java,stack,Java,Stack,我目前正在研究堆栈,有一件事我不明白。我必须创建两个构造函数。我不明白的是,当我的程序已经堆叠了一些元素时,为什么我必须将第二个构造函数的顶部设置为-1?谢谢 public stack () { Array = new Object [MAX_ELEMENTS]; top = -1; } public stack (int elements) { Array = new Object [elements]; top = -1; } 为什么我必须将第二

我目前正在研究堆栈,有一件事我不明白。我必须创建两个构造函数。我不明白的是,当我的程序已经堆叠了一些元素时,为什么我必须将第二个构造函数的顶部设置为-1?谢谢

public stack () { 
    Array = new Object [MAX_ELEMENTS];
    top = -1; 
}

public stack (int elements) { 
    Array = new Object [elements]; 
    top = -1; 
}
为什么我必须将第二个构造函数的顶部设置为-1

通常不需要,但在本例中需要,因为有两个单独的构造函数彼此不调用。有几种更好的解决方案:

  • 初始化
    top
    inline,而不是在构造函数中:

    int top = -1;
    
  • 链接施工人员:

    public stack () { 
        this(MAX_ELEMENTS);
    }
    
    public stack (int elements) { 
        Array = new Object [elements]; 
        top = -1; 
    }
    
  • 两者都有

  • 当我的程序已经堆叠了一些元素时


    没有。它只是创建了一个您指定大小的数组。

    除此之外,您还可以使用实例初始值设定项:

    {
        top = -1;
    }
    

    无论构造函数用户是谁,都将调用它。

    您不必这样做。我可以想出三种不同的选择。但您确实需要确保
    top
    已正确初始化。。。以某种方式对于所有可以创建
    堆栈
    实例的方法,第二个构造函数实际上没有添加任何元素。它使用
    元素
    作为大小。像
    MAX\u ELEMENTS
    是您的第一个构造函数中的默认值。
    当我的程序已经堆叠了一些元素时?
    不,您只需设置堆栈大小,但它仍然是空的。实际上,如果您要传递一个预先填充了元素的数组,您可能需要一个额外的参数来说明数组中有多少元素。或者,从数组大小推断数字。但无论哪种方式,都可以将
    top
    设置为适当的值。