使用pop()和push()的java堆栈数组
我为使用堆栈的程序创建的两个类有问题。我遇到的第一个问题是,当我试图运行该程序时,会出现运行时错误
这是一件很难问的事情,因为它做了好几件事。它要求用户输入向堆栈中添加数字,并检查堆栈是满的还是空的。我可能还需要帮助来复制阵列
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at IntegerStack.push(IntegerStack.java:24) at Lab15.main(Lab15.java:38)
这是运行该程序的主类
import java.util.Scanner;
public class Lab15 {
public static void main(String[] args)
{
System.out.println("***** Playing with an Integer Stack *****");
final int SIZE = 5;
IntegerStack myStack = new IntegerStack(SIZE);
Scanner scan = new Scanner(System.in);
//Pushing integers onto the stack
System.out.println("Please enter an integer to push onto the stack - OR - 'q' to Quit");
while(scan.hasNextInt())
{
int i = scan.nextInt();
myStack.push(i);
System.out.println("Pushed "+ i);
}
//Pop a couple of entries from the stack
System.out.println("Lets pop 2 elements from the stack");
int count = 0;
while(!myStack.isEmpty() && count<2)
{
System.out.println("Popped "+myStack.pop());
count++;
}
scan.next(); //Clearing the Scanner to get it ready for further input.
//Push a few more integers onto the stack
System.out.println("Push in a few more elements - OR - enter q to quit");
while(scan.hasNextInt())
{
int i = scan.nextInt();
myStack.push(i);
System.out.println("Pushed "+ i);
}
System.out.println("\nThe final contentes of the stack are:");
while(!myStack.isEmpty())
{
System.out.println("Popped "+myStack.pop());
}
}
}
这是一个将数字添加到堆栈中的类,这就是问题所在。这是我可能需要帮助复制阵列的地方。最后
import java.util.Arrays;
public class IntegerStack
{
private int stack [];
private int top;
public IntegerStack(int SIZE)
{
stack = new int [SIZE];
top = -1;
}
public void push(int i)
{
if (top == stack.length)
{
extendStack();
}
stack[top]= i;
top++;
}
public int pop()
{
top --;
return stack[top];
}
public int peek()
{
return stack[top];
}
public boolean isEmpty()
{
if ( top == -1);
{
return true;
}
}
private void extendStack()
{
int [] copy = Arrays.copyOf(stack, stack.length);
}
}
任何帮助或指导都将不胜感激
# 1 楼答案
为堆栈实现提供更好的解决方案
如果必须使用数组。。。下面是代码中的问题和可能的解决方案
# 2 楼答案
Java中的堆栈实现
输出
# 3 楼答案
因为在构造函数中将:
top
变量初始化为-1
,所以在访问数组之前,需要在push()
方法中增加top
变量。请注意,我已将赋值更改为使用^{这将修复你发布的
ArrayIndexOutOfBoundsException
。我可以在你的代码中看到其他问题,但由于这是一个家庭作业,我将把它们作为“读者练习”。:)