无法显示堆栈的内容
Trouble showing the contents of a Stack
我有一个堆栈接口和一个 class,它实现接口中的方法(push
、pop
、isEmpty
和 isFull
)。
我无法显示堆栈的内容。这是我的主要 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@15db9742
是 Object
的 toString
的默认实现 return。
例如:
@Override
public String toString ()
{
return theStack.toString();
}
通过间接调用 System.out.println(si)
,Stack 的 toString()
方法被调用。可能这个方法没有被 Stack class 覆盖,这就是调用 Object 的 toString
方法的原因。这只是打印对象的 class 和地址 (stack.MyStack@15db9742
).
解决方案是覆盖 toString
方法并进行适当的实现 returns 所需的字符串。
我有一个堆栈接口和一个 class,它实现接口中的方法(push
、pop
、isEmpty
和 isFull
)。
我无法显示堆栈的内容。这是我的主要 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@15db9742
是 Object
的 toString
的默认实现 return。
例如:
@Override
public String toString ()
{
return theStack.toString();
}
通过间接调用 System.out.println(si)
,Stack 的 toString()
方法被调用。可能这个方法没有被 Stack class 覆盖,这就是调用 Object 的 toString
方法的原因。这只是打印对象的 class 和地址 (stack.MyStack@15db9742
).
解决方案是覆盖 toString
方法并进行适当的实现 returns 所需的字符串。