I have a problem with 2 classes that I have created for a program the uses the stack. The first problem that I get is that when I try to run the program I get a runtime error. Its kind of a difficult thing to ask because it doing several things. It asks for user input to add numbers to the stack and checking if the stack is full or empty. I also may need help to copy the array.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at IntegerStack.push(IntegerStack.java:24) at Lab15.main(Lab15.java:38)
This is the main class that runs the program.
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());
}
}
}
This is the class that is adding the numbers to the stack which is what has the problems. This is where I may need help copying the array. At the end.
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);
}
}
Any help or direction will be appreciated.
Here is an example of implementing stack in java (Array Based implementation):
calling MyStack:
output:
Better solution for your Stack implementation
If you have to use Array... Here are problems in your code and possible solutions
Stack Implementation in Java
Output
Because you initialized the
top
variable to-1
in your constructor, you need to increment thetop
variable in yourpush()
method before you access the array. Note that I've changed the assignment to use++top
:That will fix the
ArrayIndexOutOfBoundsException
you posted about. I can see other issues in your code, but since this is a homework assignment I'll leave those as "an exercise for the reader." :)