2012-12-05 122 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("***********************************************"); 
    }