gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:15:27 25 4
gpt4 key购买 nike

我对类、构造函数和堆栈的工作方式有点困惑。我正在尝试创建一个默认大小为 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++;

}
}

我这样做正确吗?另外,我将如何编写推送和弹出方法?我了解这些方法是如何工作的,但我真的很困惑如何使用它们。

最佳答案

这里有很多问题:

  • 类用名词短语命名,而不是动词短语。
  • 类名称通常以大写字母开头。例如,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>作为堆栈的后备存储,因此大小不会固定。

关于java - 为非泛型堆栈类编写方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com