将新对象添加到对象数组时遇到问题。 看:
A.adjacencies = new Edge[] { new Edge(M, 8) };
这是一个示例,其中Edge []由一个Object组成。但我不知道Edge []有多少物体,因为我从文件中取出数字。我采取了" 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。
答案 0 :(得分:0)
您的代码
A.adjacencies = new Edge[] { new Edge(M, 8) };
创建大小为1的数组。数组的大小在创建数组时确定,以后不能更改。如果需要,您可以创建新数组并将元素从旧数组复制到新数组。 (这是ArrayList实现的粗略描述)。
如果您事先知道阵列的大小,请执行
A.adjacencies = new Edge [size]; A.adjacencies [0] =新Edge(M,8); ... A.adjacencies [size-1] =新Edge(M,等等);
因为您从文件中读取,所以您应该知道数据结构的大小。大多数文件格式首先存储动态结构的大小,然后存储结构的元素。
如果您事先不知道结构的大小,那么动态数据结构(java.util.List,在您的情况下)只是合理的选择。
答案 1 :(得分:0)
创建
后List<Vertext> vertexList = new ArrayList<>();
并添加了东西而不用担心限制,你可以
Vertex[] vertexArray = vertexList.toArray( new Vertex[vertexList.size()] );
一切都会奏效。
(对于未来:与List相比,基于数组的代码存在缺点 - 正如您现在已经注意到的那样。)