2012-12-05 118 views
0
public class VenueManagement extends JApplet 
{ 

    HashSet<Venue> vset; 

    public void addValues() 
    { 
     vset = new HashSet<Venue>(); 
     Venue outstage = new VenueOut("Outdoor Stage"); 
     Venue libstage = new VenueOut("Library Stage"); 
     Venue audi = new VenueMB("Audi", true); 
     Venue lt1 = new VenueMB("LT1", true); 

     Event e1 = new Event("Drama", 11); 
     Event e2 = new Event("Dance", 21); 
     Event e3 = new Event("Music", 31); 
     Event e4 = new Event("Art", 41); 
     Event e5 = new Event("Literary", 51); 
     Event e6 = new Event("Informals", 61); 
     Event e7 = new Event("Sport", 71); 
     Event e8 = new Event("Tech", 81); 

     outstage.addEvent(1, e1); 
     outstage.addEvent(2, e2); 
     libstage.addEvent(3, e3); 
     libstage.addEvent(4, e4); 
     audi.addEvent(5, e5); 
     audi.addEvent(6, e6); 
     lt1.addEvent(7, e7); 
     lt1.addEvent(8, e8); 

     vset.add(outstage); 
     vset.add(libstage); 
     vset.add(audi); 
     vset.add(lt1); 

     Iterator<Venue> vset_iter = vset.iterator(); 
     while (vset_iter.hasNext()) 
     { 
      System.out.println(vset_iter.next().vname + " AND " + vset_iter.next()); 
      System.out.println("***********************************************"); 
     } 
    } 

    // ///////////////////////////////////////////////////INIT//////////// 
    public void init() 
    { 
     this.setLayout(new BorderLayout()); 
     addValues(); 
     this.add(menubar, BorderLayout.NORTH); 
    } 

} 

這是我正在嘗試製作的更大的applet的一部分。我遇到了問題,因此我將其確定爲該計劃的這一部分。 我理論上應該獲得所有vname的列表,並從線40和41對應的Venue對象,但我似乎只有這個是越來越:無法迭代完成HashSet

LT1 AND [email protected] 
*********************************************** 
Library Stage AND [email protected] 
*********************************************** 

我沒有收到另外兩個對象和他們的名字一些原因。

這是一個非常簡單的代碼,我只是創造一個Iterator爲vset,然後遍歷它while循環。

任何線索?

+0

我懷疑'的hashCode()'或'平等()'方法'在'Venue'中不太正確。什麼'System.out.println(vset.size())'打印? – biziclop

回答

5

Iterator#next返回的下一個元素的迭代

Iterator<Venue> vset_iter = vset.iterator(); 
while (vset_iter.hasNext()){ 
     Venue v= vset_iter.next(); 
     // you can retrieve the venue object's field here 
     //System.out.println(v.vname + " AND " + v); 
     //System.out.println("***********************************************"); 
} 
+0

哈哈,很好看。是的,你不應該調用'vset_iter.next()'兩次,因爲它會使迭代器前進兩次(不出所料)。 – biziclop

+0

Oookay修復它。我仍然不明白,我們是如何對代碼做出改變的?我們只是創建了一個單獨的'Venue'對象,然後在'println'內引用它,而不是直接執行它。 編輯:* facepalm *我明白了我現在明白了。 – user1265125

+0

是的,@ user1265125兩次調用'.next()',這是一項耗時的操作。 – Andy

0

避免調用next()的兩次循環中,你跳過場地

Iterator<Venue> vset_iter = vset.iterator(); 
Venue venue; 
    while (vset_iter.hasNext()) 
    { 
     venue = vset_iter.next(); 
     System.out.println(venue.vname + " AND " + venue.otherString); 
     System.out.println("***********************************************"); 
    }