在Java中通过循环将对象添加到数组

时间:2013-11-23 01:33:57

标签: java arrays object

Vertex类型的每个对象都有一个名为'adjacencies'的数组,由Edge类型的对象组成:

class Vertex
{
public Edge[] adjacencies;
}

我有一个名为vertexList的Vertex对象的ArrayList。 每个Edge对象都包含(顶点目标,到达目的地的成本),成本来自成本矩阵:

vertexList.get(0).adjacencies = new Edge[]{ new Edge(vertexList.get(0), intMatrix[0][0]),
                                 new Edge(vertexList.get(1), intMatrix[0][1]),
                                 new Edge(vertexList.get(2), intMatrix[0][2]),
                                 new Edge(vertexList.get(3), intMatrix[0][3]),
                                 new Edge(vertexList.get(4), intMatrix[0][4]),
                                 new Edge(vertexList.get(5), intMatrix[0][5]),
                                 new Edge(vertexList.get(6), intMatrix[0][6])};
vertexList.get(1).adjacencies = new Edge[]{ new Edge(vertexList.get(0), intMatrix[1][0]),
                                 new Edge(vertexList.get(1), intMatrix[1][1]),
                                 new Edge(vertexList.get(2), intMatrix[1][2]),
                                 new Edge(vertexList.get(3), intMatrix[1][3]),
                                 new Edge(vertexList.get(4), intMatrix[1][4]),
                                 new Edge(vertexList.get(5), intMatrix[1][5]),
                                 new Edge(vertexList.get(6), intMatrix[1][6])};

这是硬编码的,有效,但是有七个不同的顶点它不优雅,我想简化这些对象和带循环的数组的创建。我尝试了以下但没有运气:

for (int b = 0; b < 7; b++){
       vertexList.get(b).adjacencies = new Edge[]{
           for (int p = 0; p < 7; p++){
               new Edge(vertexList.get(p), intMatrix[b][p]);
           }
       }
   }

我的IDE告诉我第二个for循环是'非法开始表达' 是否可以用循环创建边缘?谢谢!

1 个答案:

答案 0 :(得分:0)

你不能简单地将某些东西实例化为必杀技,这是你在内循环中尝试做的事情。除了不允许在静态数组初始化中启动循环。

首先在辅助变量中创建Edge []:

Edge[] myNewEdge = new Edge[7];
for(i=0; i<7;i++) {
    myNewEdge[i] = new Edge(...);
}

然后将其分配到vertexList:

vertexList.get(b).adjacencies = myNewEdge;