2012-10-12 37 views
1

假設我有這些類:與多個陣列工作,並增加對象

public class EdgeI { 
    public int from; 
    public int to; 

    public EdgeI (int a1, int a2) { 
    from = a1; 
    to = a2; 
    } 
} 

public class VertexI { 
    public List neighbors; 
    public String info; 

    public VertexI (List neig, String str) { 
    neighbors = neig; 
    info = str; 
    } 

} 

public class vertexWeight { 
    public int v; 
    public int w; 

    public vertexWeight (int vertexNum, int wum) { 
    v = vertexNum; 
    w = wum; 
    } 
} 

假設我有包含對數字的EdgeI對象的列表。假設我也有一個包含空列表和字符串的VertexI對象列表。我想補充以下的空單:

假設我有這個作爲我EdgeI的對象列表

(1,2), (1,2) (1,2), (1,3), (1,3), (1,4) 

對於列表中的第一個VertexI對象,我想補充以下列表

(2,3) (3,2) 

到頂點對象。基本上我想取「to」整數以及「to」整數重複的次數,並創建vertexWeight對象,將其添加到VertexI類的neig列表中。因此neig爲第一個VertexI對象將是vertexWeight對象(2,3)(3,2)。爲了實現這個,我創建了這個到目前爲止:

public void createGraph() { 
    int oldFrom = -1; 
    int oldTo = -1; 
    for(int i = 0; i < edges.size(); i++) { 
     EdgeI e = edges.get(i); 
     int from = e.from; 
     int to = e.to; 
     VertexI v = vertices.get(from); 
     v.neighbors.add(new vertexWeight (to, 1)); 
     if (from == oldFrom && to == oldTo){} 
     //have to add increment the number 1 in the vertex weight object somehow 
     else { 
     oldFrom = from; 
     oldTo = to; 
     } 
    } 
    } 

我需要一些提示或方法來實現這個?我的邏輯可能不正確,那是我需要最多幫助的地方。

+0

儘量避免像您的第一個代碼示例一樣的「假」代碼。如果你想簡潔,你可以不用列出語法錯誤的構造函數簽名,而是包含'public'或默認訪問字段,並用'// ...'縮寫構造函數體。 (一個好主意,如果構造函數可以由IDE生成)。這樣,或多或少地清楚你的類的結構是什麼,並且代碼將在複製粘貼後編譯,因此需要嘗試較少的修改回答。 – millimoose

+0

修復了小費的提示 – ellangog

回答

0

我/我們必須對你想做什麼做一些假設 - 例如,在你的例子中,'to'值是小的,簡單的整數,但我們沒有指出所有的'to'值屬於這一類。

我推薦爲每個'to'值創建一個HashMap條目;該索引是一個Integer或一個浮點數(或一個雙精度值),它對應於'to'項,並且該值包含一個int值,每次遇到'to'值時都可以遞增。

如果這樣不能解決您的問題,也許您可​​以解釋更多您需要的內容。

+0

我會嘗試使用HashMaps,但爲了記錄我的整數值相當小。沒有超過100. – ellangog

+0

假設我在數組中創建了一個對象「v.neighbors.add(new vertexWeight(to,1))」。我將如何回到它並在幾行代碼後更改1?這是我的問題的本質。 – ellangog

+0

對於每個'to'對象,確定它是否已經在HashMap中。如果是,則增加相應的int。如果不是,則創建它的鍵,並將int設置爲1(這是您遇到的第一個鍵)。如果你知道*沒有'to'值超過N,那麼N足夠小,創建一個N個整數的數組並將它們全部設置爲0;然後使用'to'值作爲該數組的索引;當你找到一個時增量,並且你有一個數組,每個int遇到的次數(如果它們是小的和整數的話)。 – arcy