无法显示堆栈的内容

时间:2015-01-05 17:40:24

标签: java methods interface stack

我有一个堆栈接口和一个实现接口中的方法的类(pushpopisEmptyisFull)。

我在显示堆栈内容时遇到问题。这是我的主要课程。

    StackInterface si = new MyStack();
    System.out.println("Stack is empty: "+si.isEmpty());

    si.push("Hello");
    si.push("Adam");
    si.push("Horrigan");
    si.isEmpty();
    si.pop();
    si.isFull();

    System.out.println(si);

输出结果为:

Stack is empty: true
stack.MyStack@15db9742

我想知道,为什么堆栈的内容不输出?

编辑,这是MyStack类。

public class MyStack implements StackInterface {

    public ArrayList<String> theStack;

    public MyStack() {
        theStack = new ArrayList<String>();
    }

    public boolean isEmpty() {
        return theStack.isEmpty();
    }

    public boolean isFull() {
        return false;
    }

    public void push(Object newItem) {
        theStack.add((String) newItem);
    }

    public Object pop() {
        if (!(theStack.isEmpty())) {
            return theStack.remove(0);
        } else {
            return null;
        }
    }

}

2 个答案:

答案 0 :(得分:2)

您应该覆盖toString课程中的MyStack,以便按照您的意愿显示它。 MyStack@15db9742 Object toString的默认实现将会返回{。}}。

例如:

@Override
public String toString ()
{
    return theStack.toString();
}

答案 1 :(得分:1)

通过间接调用System.out.println(si),调用Stack的toString()方法。可能这个方法没有被Stack类覆盖,这就是调用Object的toString方法的原因。这只是打印对象的类和地址(stack.MyStack@15db9742)。

解决方案是覆盖toString方法并创建一个返回所需String的适当实现。