2013-04-14 227 views
0

嗨我被困在如何使用迭代器遍歷通用列表。遍歷通用列表java

例如我的hve是這樣的:

public class a{ 
    protected int _b; 
    protected String _c; 
    protected float _d; 
    protected int _e; 
public a(int b, String c, float d, int e){ 
      // assign value _b,_c,_d,_e 
} 

    static class ab implement Iterable<a>{ 
      public static List myList = new ArrayList(a); 
      public static void addlist(a f){ 
        myList.add(f); 
      public Iterator<a> iterator(){ 
        return myList.iterator()}// overriding List iterator method 

然後在主方法我通過創建類的實例分配用於_b,_c,_d,_E值並將其添加到myList中,但是當我使用迭代器它不顯示列表,但它顯示了該列表的內存位置(我猜)。我希望它能逐個顯示課堂上的所有領域。任何建議我應該做什麼?

回答

1

覆蓋類a中的toString()方法。

@Override 
public String toString() { 
    return "_b:"+_b+",_c:"+_c+"_d:"+_d+",_e:"+_e; 
} 

如果toString()沒有再重寫,你a類使用繼承一個從Object類:

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 
+0

如果我想使用增強的for-loop來遍歷列表然後使用print來顯示它? –

+0

@TommyNgo你是什麼意思? – christopher

+0

請讓我知道你想打印哪種方式? ''System.out.println(a)的實例''會一直尋找類'a'的'toString()',或者繼承或者覆蓋。所以如果你想直接打印「a」的實例,你需要重寫。 – NINCOMPOOP

2

it doesnt show the list but it shows the memory location(i guess)of that list.

它顯示內存位置,因爲您沒有覆蓋toString方法,所以它回落到默認的Object實現。您需要覆蓋a類中的toString方法。

如果您添加類似:

public String toString() 
{ 
    return // Some string data. 
} 

要將a類,你會開始看到正確的輸出。

注意:Java命名約定規定,所有類都應以大寫字母開頭,並且每個單詞都有一個大寫字母。即:a -> A