2

この質問に答えるのを手伝っていただければ幸いです。

私はすでに、Javaを使用して非常に標準的な方法でカスタムリンクリストを自分で作成しました。以下は私のクラスです:

public class Node {

   private Object obj;
   private Node next;

   public Node(Object obj){
       this(obj,null);
   }

   public Node(Object obj,Node n){
       this.obj = obj;
       next = n;
   }

   public void setData(Object obj){
       this.obj = obj;
   }

   public void setNext(Node n){
       next = n;
   }

   public Object getData(){
       return obj;
   }

   public Node getNext(){
       return next;
   }

}




public class linkedList {
    private Node head;


    public linkedList(){
        head = null;
    }

    public void setHead(Node n){
        head = n;
    }

    public Node getHead(){
        return head;
    }


   public void add(Object obj){
       if(getHead() == null){
           Node tmp = new Node(obj);
           tmp.setNext(getHead());
           setHead(tmp);
       }else{
           add(getHead(),obj);
       }
   }


   private void add(Node cur,Object obj){
       if(cur.getNext() == null){
           Node tmp = new Node(obj);
           tmp.setNext(cur.getNext());
           cur.setNext(tmp);
       }else{
           add(cur.getNext(),obj);
       }
   }


}

以下のようにリストに挿入した値を印刷しようとしています

public static void main(String[] args) {
        // TODO code application logic here
        Node l = new Node("ant");
        Node rat = new Node("rat");
        Node bat = new Node("bat");
        Node hrs = new Node("hrs");

        linkedList lst = new linkedList();
        lst.add(l);
        lst.add(rat);
        lst.add(bat);
        lst.add(hrs);



        Node tmp = lst.getHead();
        while(tmp != null){

            System.out.println(tmp.getData());
            tmp = tmp.getNext();

        }


    }

しかし、IDEから得た出力は

linklist.Node@137bd6a1
linklist.Node@2747ee05
linklist.Node@635b9e68
linklist.Node@13fcf0ce

bat、ant、ratなどの文字列の実際の値ではなく参照を出力するのはなぜですか?

実際の値を印刷したい場合はどうすればよいですか?

どうもありがとうございます

4

4 に答える 4

4

あなたのlinkedListクラスはすでにあなたのためにNodesを作成しています!

linkedList list = new linkedList();
list.add("foo");
list.add("bar");
Node tmp = lst.getHead();
while(tmp != null){
    System.out.println(tmp.getData());
    tmp = tmp.getNext();
}

印刷します

foo
bar
于 2012-04-16T00:53:37.140 に答える
1

toString()次のメソッドをオーバーライドする必要がありますNode

@Override
String toString() {
  String val = // however you want to represent your Node
  return val;
}

そしてノードを印刷します:

System.out.println(tmp);

または、 sのみを格納することがわかっている場合はNode.getData()、aを返します。定義内でsをに変更します。StringStringObjectStringNode

または、ジェネリックスを使用して、ノード内のデータのタイプを指定することもできます

更新:(コメントによって引き起こされた)もう少し考えた後、私は何かがおかしいと思います:

tmp.getData()文字列を返す必要があります(ノードの単一パラメーターctorに基づいており、文字列を渡しています)が、出力はNodeオブジェクトへの参照に関するものです。代わりにのobjメンバーをリセットlinkedList.addすることは可能ですか?NodeNode

于 2012-04-16T00:41:28.437 に答える
-1

LinkedListはObjectsであり、ObjectstoStringメソッドは参照を出力します。文字列を印刷する場合は、LinkedListをString / Genericsに変更するか、次のように印刷をキャストします。

String output = (String)tmp.getData();
System.out.println(output);

(必要に応じて、これを1行で実行できます)。

于 2012-04-16T00:41:03.603 に答える
-1

NodeクラスのgetData()は、オブジェクト型を返します。println()によって正しく印刷されるように、文字列にキャストする必要があります。

System.out.println((String)tmp.getData());

あなたのためにトリックをする必要があります。

于 2014-05-07T15:44:08.657 に答える