为什么我得到这个:[LMyStack.Node@addbf1当我尝试打印正确的Stack值时?

时间:2014-05-06 12:29:55

标签: java stack

这是我的Java代码,用于创建堆栈并从堆栈中弹出一个节点。但是当我将节点添加到Node[]时,我打印到屏幕时得到的值是: [LMyStack.Node; @ addbf1

我不知道是什么问题。有什么帮助吗?

 public class MyStack{
    private Node[] values;
    public MyStack(){

    }
    public MyStack(Node[] values){
        this.values=values;
    }
    //pop one Node from Stack
    public Node pop(){
        Node result=null;
        if(values!=null && values.length-1>0){
            result = values[values.length-1];
            Node[] temp = new Node[values.length-1];
            for(int i=0;i<values.length-1;i++){
                temp[i]=values[i];
            }
            this.values=temp;
            //Print the stack to screen
            System.out.println("The stack is:"+this.value); 
        }

        return result;

    }
}
class Node {
    private int value;
    public Node(){
        value=0;
    }
    public Node(int value){
        this.value=value;
    }
}
class Result{
    public static void main(String []args){
        Node node1 = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);
        //Here is problem
        Node[] n = {node1, node2, node3};
        //System.out.println("Node is: "+n[1] );
        MyStack stack = new MyStack(n);
        stack.pop();
    }
}

2 个答案:

答案 0 :(得分:0)

Stack Overflow上有很多例子。请记得先搜索一下!

您所看到的是在Node对象数组上调用的默认toString()方法。 [LMyStack.Node表示节点实例数组,addbf1表示哈希码的十六进制表示。使用循环:

for (Node node : values) {
    System.out.println(node);
}

答案 1 :(得分:0)

System.out.println(&#34;堆栈是:&#34; + this.value);默认情况下将被视为System.out.println(&#34;堆栈为:&#34; + this.value.toString());在运行时返回classname @ hashcode

toString()中的默认Object实施调用它..

 public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }