簡體   English   中英

如何從Java中的循環列表中打印數據?

[英]How to print data from a circular list in java?

我正在使用Java中的循環列表。 我正在嘗試打印列表中的數據,但沒有得到所需的輸出。 我得到的輸出為

通函@ 55f96302

通函@ 3d4eac69

通函@ 42a57993

請幫助解決這個問題。

謝謝!!

import java.util.Iterator;


public class CircularList<T> implements Iterable<T> {

    private static class myIterator<T> implements Iterator<T> {
        int i = 0;
        CircularList<T> myList;
        Entry<T> iter;

        public myIterator(CircularList<T> list) {   
            iter = list.head;
            myList = list;
        }

        public boolean hasNext() {
            return !(myList.size() == i)
        }

        public T next() {
            //System.out.println("next");
            i++;
            T nextvalue = iter.value;
            //Entry<T> nextnode = new Entry<T>();
            iter = iter.next;               
            return nextvalue;
        }

        public void remove() {
            if(myList.size() == 1) {
                myList.head = null;
                return;
            }

            if(iter == myList.head) {
                myList.head = myList.head.next;
            }
            iter.prev.next = iter.next;
            iter.next.prev = iter.prev;
        }
    } // end myIterator

    private static class Entry<T> {
        Entry<T> next;
        Entry<T> prev;
        T value;
    }

    private Entry<T> head;

    public int size() {
        int index = 0;

        Entry<T> before = head.prev;
        Entry<T> after = head;
        //System.out.println(head.value);
        //System.out.println(after.value);

        do {
            before = after;
            after = after.next;
            index++;
        } while (after != head);

        return index;
    }

    public boolean empty() {
        //System.out.println(head == null);
        return head == null;        
    }

    public void append(T value) {

        Entry<T> newnode = new Entry<T>();
        newnode.value = value;

        if (empty()) {
            head = newnode;
            head.next = head;
            head.prev = head;
        }
        else {
            Entry<T> before = head.prev;
            Entry<T> after = head;

            newnode.prev = head.prev;
            newnode.next = head;
            head.prev.next = newnode;
            head.prev = newnode;    
        }
    }


    public void insert(int index, T value) {

        Entry<T> newnode = new Entry<T>();
        newnode.value = value;

        if (empty()) {
            head = newnode;
            head.next = head;
            head.prev = head;
        }
        else {
            Entry<T> before = head.prev;
            Entry<T> after = head;

            if(index == 0) {
                head = newnode;
            }
            else {
                while(index > 0) {
                    before = after;
                    after = after.next;
                    index--;
                }

                 newnode.prev = before;
                 newnode.next = after;
                 newnode.prev.next = newnode;
                 newnode.next.prev = newnode; 
            }
        }
    } // end insert()


    public void remove(int index) {

        Entry<T> before = head.prev;
        Entry<T> after = head;

        while(index > 0) {
            before = after;
            after = after.next;
            index--;
        }   

        after.prev.next = after.next;
        after.next.prev = after.prev;
    }


    public void prepend(T value) {
        insert(0, value);
    }


    public void appendList(CircularList<T> list) {

        if (empty()) {
            head = list.head;
            return;
        }
        if (list.empty()) return;

        Entry<T> a = list.head;
        Entry<T> b = list.head.prev;
        Entry<T> c = head;      
        Entry<T> d = head.prev;

        a.prev = d;
        d.next = a;

        b.next = c;
        c.prev = b;
    }


    @Override
    public Iterator<T> iterator() {
        return new myIterator(this);        

        //throw new UnsupportedOperationException("Not implemented yet.");
    }

    public static void toString(CircularList<Integer> list) {

        String sol = "";        

        //for (CircularList<Integer> list : data) {
            sol = sol +"\n"+ String.valueOf(list);            

        //}

        System.out.println(sol);
        //return sol;
    }
}

您的問題是您已將toStringstatic方法。 您還可以將其返回類型設置為void而不是String 您需要編寫一些非靜態的內容,並在CircularList類中使用簽名public String toString() ,並使它返回要輸出的String 我還建議使用@Override批注,以便編譯器將檢查您的簽名是否正確。

您需要在CircularList類中從java.lang.Object覆蓋toString() 由於尚未完成,因此java將打印java.lang.Object.toString() ,后者將打印內存地址。 提醒一下,Java中的每個對象都擴展了java.lang.Object

String.valueOf不獲取數據。 它僅打印對象的文本表示形式,包括該對象存儲在內存中的區域( @55f96302 )。 這樣的事情應該起作用:

for(String str : list)
{
    System.out.println(str);
}

首先,我建議您不要以這種方式覆蓋toString()方法。 您的方法用於打印,而不是“返回”字符串對象。 它與原始的toString方法完全不同。 無論如何,您現在得到的結果是我想是循環列表中對象的地址。

for(Integer data : list){
    system.out.println(data.toString());
}

而且您還必須像這樣修改您的代碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM