为非泛型堆栈类编写方法将如何工作?

时间:2019-02-15 20:43:39

标签: java arrays constructor stack

我对类,构造函数和堆栈的工作方式有些困惑。我试图创建一个默认大小为5的数组。然后,我必须使用构造函数来设置数组大小。然后,我必须编写方法来推送和弹出数组中的值。这是我到目前为止所拥有的

public class createStack{

    double [] array = new double[5];

    private int top = 0;

    public createStack(double[] array){

        this.array = array;

    }
    public void push(double[] array){
        if(top >= array.length){
            System.out.println("Stack is full");

        }

        top++;

    }
}

我这样做正确吗?另外,我将如何编写用于push和pop的方法?我了解这些方法的工作原理,但是我对如何使用这些方法感到困惑。

1 个答案:

答案 0 :(得分:1)

这里有很多问题:

  • 类以名词短语而不是动词短语命名。
  • 类名称通常以大写字母开头。例如DoubleStack而非createStack
  • 为该字段提供一个初始化程序,但根据传递给构造函数的值分配该字段也没有意义。传递给构造函数的值将始终取代初始化程序。
  • top的语义不清楚。它是否指向堆栈的当前顶部或将要使用的下一个插槽?它听起来像前者,但由于堆栈开始是空的,top = 0不能指向当前顶部,因此它似乎是后者。
  • push以数组作为参数没有任何意义。应该使用单个double值将其压入堆栈。
  • 此外,push对字段中的后备数组不执行任何操作,它仅查看传递给它的数组。

以下是我希望看到的更多示例:

public class DoubleStack {
    private double[] array;
    private int top = -1; // top points to the current top of the stack, if any

    public DoubleStack() {
        array = new double[5];
        // note: this could be done with an initializer and this constructor could be omitted
    }

    public void push(double value) {
        if (top >= array.length - 1) {
            throw new IllegalStateException("Stack Overflow");
        }
        ++top;
        array[top] = value;
        // note: the previous two lines could be combined; keeping it simple
    }

    public double pop() {
        if (top < 0) {
            throw new NoSuchElementException("Stack Empty");
        }
        double value = array[top];
        --top;
        return value;
    }
}

可能的更改是使构造函数将大小作为参数,并创建所需大小的数组,而不是默认值5;或使用ArrayList<Double>作为堆栈的后备存储,以使大小不会固定。