interface Stack { public void push(Object o) throws Exception; public Object pop(); public Object peek(); public boolean isFull(); } class ArrayStack implements Stack { Object[] ar; int index = 0; public ArrayStack(int capacity) { ar = new Object[capacity]; } public void push(Object o) throws Exception { if (!isFull()) { ar[index] = o; index++; } else throw new Exception("Stack is full."); } public Object pop() { if (index > 0) { index--; return ar[index]; } // alternativ könnte man auch eine Exception werfen return null; } public Object peek() { if (index > 0) { return ar[index-1]; } // alternativ könnte man auch eine Exception werfen return null; } // pre: index <= ar.length public boolean isFull() { return (index == ar.length); } public static void main(String[] args) { Stack st = new ArrayStack(3); try { st.push(new Integer(1)); st.push(new Integer(2)); st.push(new Integer(3)); // der wirft 'ne Exception st.push(new Integer(4)); } catch (Exception e) { e.printStackTrace(); } System.out.println((Integer) st.pop()); System.out.println((Integer) st.pop()); // die 1 kommt doppelt System.out.println((Integer) st.peek()); System.out.println((Integer) st.pop()); // jetzt ist der Stack leer System.out.println((Integer) st.pop()); } }