几个对象到一个数组中

A few objects into one Array

我在向对象数组添加新对象时遇到问题。 看:

 A.adjacencies = new Edge[] { new Edge(M, 8) };

这是一个示例,其中Edge[]由一个Object组成。但是我不知道 Edge[] 会包含多少对象,因为我是从 File 中获取数字的。我把 "vertexes" 从文件到顶点[],工资从文件到工资[]。 该文件如下所示:

1 2 3
3 4 5
3 2 1
4 56 7
2 3 5 
5 2 1

每一行的第一和第二个数字是顶点,第三个是工资。

我写过这样的代码:

    Vertex[] vertices = new Vertex[N];

    for(int i=0; i<N; i++)
        vertices[i] = new Vertex(i);

    int w_1 = Vertex[0], w_2 = 0, wage = 0;

    for(int i=0; i<Vertex.length; i++) {
    if(Vertex[i] == w_1) {
        if(i%2 == 0) {
        if(wage == 0) wage = Wage[i/2];
        if(i%2 == 0) {
        for(int f=0; f<vertices.length; f++)
            if(vertices[f].name == i) {
                for(int l=0; l<vertices.length; l++) 
                    if(vertices[l].name == Vertex[i+1])
            vertices[f].adjacencies = new Edge[] { new Edge(vertices[l], wage) };
            }
        }

        if(i%2 != 0) {
            for(int f=0; f<vertices.length; f++)
                if(vertices[f].name == i) {
                    for(int l=0; l<vertices.length; l++) 
                        if(vertices[l].name == Vertex[i-1])
                    vertices[f].adjacencies = new Edge[] { new Edge(vertices[l], wage) };
        }
        w_1 = i;

        int temp = Wage[i/2];
        if(temp < wage) { 
            wage = temp;
            if(i%2 == 0) 
                w_2 = Vertex[i+1];
            if(i%2 != 0) 
                w_2 = Vertex[i-1];
        }
        }
        }
    }

如何解决这个问题,将几个对象插入到一个数组中,不知道会有多少对象? :) 我不能使用 ArrayList。

您的代码

A.adjacencies = new Edge[] { new Edge(M, 8) };

创建大小为 1 的数组。数组的大小在创建数组时确定,以后无法更改。如果需要,您可以创建新数组并将元素从旧数组复制到新数组。 (这是对 ArrayList 实现的粗略描述)。

如果你事先知道数组的大小,就这样做

A.adjacencies = 新边[尺寸]; A.adjacencies[0]=新边(M, 8); ... A.adjacencies[size-1]=new Edge(M, whatever);

因为你是从文件中读取的,所以你应该知道你的数据结构的大小。大多数文件格式首先存储动态结构的大小,然后是结构的元素。

如果您事先不知道结构的大小,那么动态数据结构(java.util.List,在您的情况下)是唯一合理的选择。

创建一个

List<Vertext> vertexList = new ArrayList<>();

添加内容而不用担心限制,您可以

Vertex[] vertexArray = vertexList.toArray( new Vertex[vertexList.size()] );

一切正常。

(对于未来:与 List 相比,基于数组的代码有缺点 - 正如您现在已经注意到的那样。)