迭代二维Java数组

时间:2009-01-28 01:53:40

标签: java arrays iterator

public static List<Vertex<Integer>> petersenGraph() {
    List<Vertex<Integer>> v = new ArrayList<Vertex<Integer>>();

    for (int i = 0; i < 10; i++) {
        v.add(new Vertex<Integer>(i));
    }

    int[][] edges =
    {{0,1}, {1,0}, {1,2}, {2,1}, {2,3}, {3,2}, {3,4}, {4,3}, {4,0}, {0,4},
    {5,6}, {6,5}, {6,7}, {7,6}, {7,8}, {8,7}, {8,9}, {9,8}, {9,5}, {5,9},
    {5,0}, {0,5}, {6,2}, {2,6}, {7,4}, {4,7}, {8,1}, {1,8}, {9,3}, {3,9}};

    for (int[] e : edges)
        v.get(e[0]).successors().add(v.get(e[1]));

    return v;
}

我理解所有事情,直到迭代边缘。到底发生了什么事?

编辑:为什么使用e[0]e[1]访问它们? e[0]是第一个数字,e[1]是第二个数字吗?

3 个答案:

答案 0 :(得分:1)

唉,那太丑了。

edges是一个二维数组,因此它是一个int数组的数组。在实际定义中,它是一对数组。

(int [] e:​​edges)的行简单地表示在每次迭代中,e将成为不同的int数组,因此在每次迭代中它都是不同的对。

然后,e [0]表示该对中的第一项,e [1]表示另一项。 因此,第一个坐标用于查找顶点,然后发生一些事情并添加第二个坐标。如果没有看到顶点或知道算法,则不清楚。

答案 1 :(得分:0)

多维数组edges实际上是一个“数组数组”。 for语句一次从edges中提取一个元素,edges的每个元素都是int[]

所以第一次通过循环,e将是{0, 1}。第二次是{1, 0}。第三次是{1, 2}。等等。

答案 2 :(得分:0)

它正在创建的图表上的维基百科页面为http://en.wikipedia.org/wiki/Petersen_graph

从图中可以看出,图形中的边缘由Vertex.successors集合表示,边缘数组用于构造图形,使用第一个索引作为来自节点和第二个索引作为每个边的节点。

这也可以解释为什么每对都跟着它相反,例如{0,1},{1,0},因为Peterson图是无向的,所以节点之间的连接必须在两个方向上表示。