我的堆栈实现(Java)存在问题。 这是我的代码:
public class Stack {
char[] stack;
int size;
public Stack(int n) {
stack = new char[n];
size = 0;
}
public void push(char c) {
stack[size] = c;
size++;
}
public char pop() {
return stack[size--];
}
public boolean isEmpty() {
return (size == 0);
}
public void print() {
System.out.print("Stack : ");
for(int i = 0; i < size; i++) {
System.out.print(stack[i] + " ");
}
}
} 这是主要方法:
Stack st = new Stack(4);
st.push('a');
st.push('n');
st.push('a');
st.print();
char c = st.pop();
System.out.println("char : " + c); // here is nothing
我认为pop函数是错误的,因为如果我从main方法函数调用它返回任何内容。感谢。
答案 0 :(得分:1)
您在size
中递减pop
两次 - 一次在调试打印语句中,一次在访问阵列时。
因为您的size
变量意味着比最后一个有效索引大一个,所以在访问数组之前只减少一次。
public char pop() {
size--;
System.out.println("class stack : " + stack[size]);
return stack[size];
}