所以我已经创建了这个堆栈程序,我创建了几个方法,包括pop
,push
,isEmpty
。堆栈的大小是10.因此,当我按下10个以上的元素时,它会显示错误
堆栈已满
它应该做什么。但是,它给出了
当我尝试使用数组索引超出界限
POP
方法超过10次时出现错误。如何防止它出错。
这里是整个代码
class Stack {
final int MAX_SIZE = 10;
int top;
//int myVal = top;
int[] stack;
public Stack()
{
top=-1;
stack = new int[MAX_SIZE];
//stack[0] = top;
}
public void push(int item)
{
if (top == MAX_SIZE-1){ //stackIsFull
System.out.println("Stack is full");
return;
}
else{
this.top++;
//System.out.println(this.top);
stack[this.top] = item;
System.out.println(item + "at index" + this.top);
}
}
public int pop()
{
if(top!= MAX_SIZE-1){//(top==-1){
System.out.println("Stack is empty");
return -1;
}
return stack[top];
}
public void peek()
{
System.out.println(stack[top] + "at index" + top);
}
public boolean isEmpty()
{
//return top == -1;
if (top != MAX_SIZE-1){//(top == -1){
return true;
}
return false;
}
public void search(int item)
{
for (int i=0; i<stack.length; i++)
{
if (stack[i] == item){
System.out.println(item + " at index " + i);
return;
}
}
System.out.println("error");
}
答案 0 :(得分:1)
当您的pop
方法第10次删除elemenths时,top
将等于0.在第11次调用pop
时,if
条件不会是{{ 1}}和true
将减少为-1。你试着top
。数组不能有负索引。因此,您可以从债券错误中获得数组索引。
尝试类似这样的内容
return stack [-1]
请记住,如果你将-1推到堆栈,你的代码将假设堆栈为空,同时弹出该元素
答案 1 :(得分:0)
修正了pop方法
public int pop()
{
if(top==-1){//(top==-1){
System.out.println("Stack is empty");
return -1;
}
top = top - 1;
if (top<0){
return top;
}
return stack[top];
}