几个对象到一个数组中
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 相比,基于数组的代码有缺点 - 正如您现在已经注意到的那样。)
我在向对象数组添加新对象时遇到问题。 看:
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 相比,基于数组的代码有缺点 - 正如您现在已经注意到的那样。)