2012-10-12 76 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