每个顶点类型的对象都有一个名为“邻接”的数组,该数组由边缘类型的对象组成:
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循环是“表达式的非法开始”是否可以用循环创建边?谢谢!
您不能简单地将某些实例化为必杀技,这就是您要在内部循环中尝试做的事情。除此之外,不允许在静态数组初始化内启动循环。
首先在辅助变量中创建Edge []:
Edge[] myNewEdge = new Edge[7];
for(i=0; i<7;i++) {
myNewEdge[i] = new Edge(...);
}
然后将其分配到您的vertexList中:
vertexList.get(b).adjacencies = myNewEdge;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句