[英]Java: Object Array assignment in for loop
我在從用戶輸入的for循環中分配Edge數組時遇到了麻煩,而不是像在這里那樣對其進行硬編碼。
對每個頂點的Edge []鄰接關系分配新的邊有幫助嗎? 請記住,它可能是1個或多個邊。
for (int i = 0; i < total_vertices; i++){
s = br.readLine();
char[] line = s.toCharArray();
for (int j = 0; j < line.length; j++){
if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
int vert = Integer.parseInt(String.valueOf(line[j]));
int w = Integer.parseInt(String.valueOf(line[j+2]));
v[i].adjacencies = new Edge[] {new Edge(v[vert], w)};
}
}
}
上面的代碼很好地找到了從v0到所有其他頂點的最短路徑。 將新的edge []分配給edge []鄰接時,會發生此問題。
例如,這不會產生正確的輸出:
for (int i = 0; i < total_vertices; i++){ s = br.readLine(); char[] line = s.toCharArray(); for (int j = 0; j < line.length; j++){ if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3 int vert = Integer.parseInt(String.valueOf(line[j])); int w = Integer.parseInt(String.valueOf(line[j+2])); v[i].adjacencies = new Edge[] {new Edge(v[vert], w)}; } } }
與此相反:
v0.adjacencies = new Edge[]{ new Edge(v[1], 1), new Edge(v[2], 3) };
如何接收用戶輸入並進行Edge []傳遞給鄰接關系? 問題在於它可能是0條邊或許多條邊。
任何幫助將不勝感激謝謝!
在您的情況下,您要為j的每次迭代分配v [i] .adjacencies。因此,這意味着它的line.length = 8,然后v [i] .adjacencies被分配了2次。 我認為這不是您的意圖。
for (int j = 0; j < line.length; j++){
if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
int vert = Integer.parseInt(String.valueOf(line[j]));
int w = Integer.parseInt(String.valueOf(line[j+2]));
v[i].adjacencies = new Edge[] {new Edge(v[vert], w)};
}
您可以像這樣更改代碼...
Edge[] edges = new Edge[line.length/4];
for (int j = 0; j < line.length; j++){
if(j % 4 == 0 ){ //Input: vertex weight vertex weight: 1 1 2 3
int vert = Integer.parseInt(String.valueOf(line[j]));
int w = Integer.parseInt(String.valueOf(line[j+2]));
edges[j/4] = {new Edge(v[vert], w)};
}
v[i].adjacencies = edges;
它可能不是確切的代碼,但是您必須在循環之外進行分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.