2015-12-08 94 views
3

我正在寫一個程序,它使用ListIterator操縱ArrayList而不使用任何ArrayList方法。在這種情況下ArrayList應該表現得像一個集合。添加到ArrayList對象的ListIterator

我的add方法遍歷ArrayList,並將每個元素與要添加的數字進行比較,以避免重複。 OurSet()是該類的構造函數。我還重新定義了使用ListIterator方法打印的toString方法。

當我測試這兩個方法時,似乎add方法實際上沒有添加任何東西(或者print語句沒有顯示它)。使用下面主要方法的輸出是空白的,我不太清楚爲什麼。我跟蹤了代碼幾次,並在方法中放置打印語句以確保它們貫穿每一行。在toString方法中,它永遠不會進入while循環。代碼如下,任何幫助表示讚賞!

OurSet() 
{ 
//  list is the ArrayList object, it was defined earlier and now instantiated 
    list = new ArrayList(); 
//  iter is the ListIterator object, it was defined earlier and now instantiated 
    iter = list.listIterator(); 
} 

public void add(int x) 
{ 
    while(iter.hasNext()) 
    { 
     int item = (Integer) iter.next(); 
     if(item == x) 
      break; 
    } 
    iter.add(new Integer(x)); 
} 

public String toString() 
{ 
    String set = ""; 
    while(iter.hasNext()) 
    { 
     int item = (Integer) iter.next(); 
     set += item + " "; 
    } 
    return set; 
} 

這是我的主要方法。

public static void main(String args[]) 
{ 
    OurSet set = new OurSet(); 
    set.add(50); 
    System.out.println(set); 
} 
+4

off-top但是:'set + = item +「」;'避免循環中的字符串連接。改用'StringBuilder'和'append'方法。示例:http://stackoverflow.com/a/1532483/1393766,在這個問題上的問題:http://stackoverflow.com/questions/14927630/java-string-concat-vs-stringbuilder-optimised-so-what-should -我做 – Pshemo

回答

0

實例化一個IteratorList對象將導致它從頭開始。由於我實例化對象的唯一時間是在構造函數中,它已經到達add方法中的列表的末尾,並且toString方法無法再次循環。通過在toString方法中重新實例化iter,該列表被正確地打印出來。