Java 如何为非泛型堆栈类编写方法?
我对类、构造函数和堆栈的工作方式有点困惑。我正在尝试创建一个默认大小为5的数组。然后,我必须使用构造函数设置数组大小。然后,我必须编写方法来推送和弹出数组中的值。这就是我目前所拥有的Java 如何为非泛型堆栈类编写方法?,java,arrays,constructor,stack,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 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编写方法?我了解这些方法是如何工作的,但我真的很困惑如何使用它们。这里有一些问题: 类是用名词短语命名的,而不是动词短语。 类名通常以大写字母开头。例如,DoubleStack不是createStack。 为字段指定一个初始值设定项,但同时根据传递给构造函数的值分配字段,这是没有意义的。传递给构造函数的值总是将取代初始值设定项。 top的语义不清楚。它是指向堆栈的当前顶部,还是指向将要使用的下一个插槽?听起来像是前者,但由于堆栈开始时是空的,top=0不能指向当前的top,因此它似乎是后者。 push将数组作为参数没有任何意义。它应该使用一个双精度值推送到堆栈上。 此外,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作为堆栈的备份存储,这样大小就不会固定。这个问题不够具体。你有什么问题吗?如果代码按预期工作,则说明您的操作是正确的。@Gendarme我没有收到任何错误,但我不确定在给数组的默认值为5后设置数组大小的构造函数是否正确。正如我所说,我不确定如何编写方法来推送和弹出一个值通常你会有两个构造函数。一个无参数的构造函数将其设置为默认数组,您可以自己指定数组或指定长度。@Gendarme I现在有了第一个无参数构造函数,将数组设置为默认值5。我试图编写第二个构造函数来设置大小,但我不知道在其中使用什么。我尝试了这个.array=array,但它不起作用。public createStackint size{this.array=new double[size];}这一切都非常合理。代码是有效的,我在main中使用了测试代码,但当它运行时,唯一输出的是com.company。StackExample@4554617c,5次,我猜这是内存地址,而不是我推到堆栈中的实际数字?@clauless\u b你在打印什么?我试图在推堆栈中的数字时打印出来,然后以弹出的方式打印它们,这看起来就像打印StackExample的实例时得到的结果,它没有toString方法,如果打印数字就不会得到。尝试System.out.printlnstack.pop;