1

Linked Listを含むデータ構造に関するいくつかの主題を再研究しようとしています。最後のクラスが機能してから時間が経ちすぎているため、残念ながら、コードのどこが間違っているのかわかりません。以下に示すように、この問題を解決する方法についてアドバイスをお願いします。

LinkedList.java

package my.linked.list;

public class LinkedList<E> {

    private Listnode<E> items;
    private Listnode<E> lastNode;
    int numItems;

    public LinkedList() {
        items = new Listnode<E>(null);
        lastNode = new Listnode<E>(null);
        numItems = 0;
    }

    public void add(E d) {
        //Listnode<E> temp = new Listnode<E>(d);
        //lastNode.setNext(temp);
        lastNode.setNext(new Listnode<E>(d));
        lastNode = lastNode.getNext();
        numItems++;
    }

    //public void add(int pos){
    //  
    //}

    public void remove(Listnode<E> n) {
        Listnode<E> temp = items;
        if (items == n) {
            items = n.getNext();
        }
        while (temp.getNext() != n) {
            temp = temp.getNext();
        }
        temp.setNext((n.getNext()));
        numItems--;
    }

    //public void remove(int pos) {
    //  
    //}

    public boolean isEmpty() {
        boolean ans = false;
        if (numItems == 0) {
            ans = true;
        }

        return ans;
    }

    public boolean contains() {
        return false;
    }

    public int size() {
        return numItems;
    }

}

MyLinkedListTest.java

package my.linked.list;

import java.io.*;

public class MyLinkedListTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList myTest = new LinkedList();

        // check whether the linkedlist is empty or not
        boolean ans = false;
        ans = myTest.isEmpty();
        if (ans = true) {
            System.out.println("This Linked List is empty");
        } else {
            System.out.println("This Linked List is not empty");
        }

        // add operation
        for (int i=0; i<5; i++){
            myTest.add(i);
            System.out.println(myTest);
        }
        System.out.println("Current size of myList : " + myTest.size());

    }

}

このコードを実行すると、以下のメッセージが表示されます。

このリンク リストは空です

my.linked.list.LinkedList@667262b6

my.linked.list.LinkedList@667262b6

my.linked.list.LinkedList@667262b6

my.linked.list.LinkedList@667262b6

my.linked.list.LinkedList@667262b6
Current size of myList : 5

私のコードは、リンクリストのデータ型に整数値を追加していないようです。この問題を解決する方法を教えてください。よろしくお願いします。

4

3 に答える 3

0

実際には LinkedList に整数が追加されています。これは、debug を使用して表示できます。

System.out.println(Object o) は、渡されたオブジェクトの toString() メソッドを自動的に呼び出しますが、これは実装されていません。そのため、LINKedList へのポインターが出力されます。

my.linked.list.LinkedList@667262b6LinkedList へのポインタです。

于 2013-09-11T02:17:46.023 に答える
0

toString()クラスのメソッドをオーバーライドするだけでLinkedList、意味のある情報 (リストの内容など) が表示されます。現在の状態では、のインスタンスはのデフォルトメソッドLinkedListを呼び出しています。これはメモリ アドレスを出力しますが、あまり役に立ちません。クラスに次のように記述します。ObjecttoString()LinkedList

@Override
public String toString() {
    Listnode<E> temp = items;
    StringBuilder sb = new StringBuilder();
    while (temp != null) {
        sb.append(temp.getValue()).append(", "); // I'm guessing
        temp = temp.getNext();
    }
    return sb.toString();
}
于 2013-09-11T02:20:09.480 に答える
0

my.linked.list.LinkedList@667262b6整数のリストのように見えない問題ですか? toString()これは、リストを反復処理してその要素を出力するメソッドをクラスに追加していないためです。

于 2013-09-11T01:56:29.667 に答える