我对类,构造函数和堆栈的工作方式有些困惑。我试图创建一个默认大小为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的方法?我了解这些方法的工作原理,但是我对如何使用这些方法感到困惑。
答案 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>
作为堆栈的后备存储,以使大小不会固定。