我有一个堆栈接口和一个实现接口中的方法的类(push
,pop
,isEmpty
和isFull
)。
我在显示堆栈内容时遇到问题。这是我的主要课程。
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;
}
}
}
答案 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的适当实现。