无法显示堆栈的内容

Trouble showing the contents of a Stack

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

我无法显示堆栈的内容。这是我的主要 class.

    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 class。

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;
        }
    }

}

您应该覆盖 MyStack class 中的 toString 以使其按您的意愿显示。 MyStack@15db9742ObjecttoString 的默认实现 return。

例如:

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

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

解决方案是覆盖 toString 方法并进行适当的实现 returns 所需的字符串。