簡體   English   中英

Java:for循環中的對象數組分配

[英]Java: Object Array assignment in for loop

我正在嘗試使用Dijkstra的算法來查找從特定頂點(v0)到其余頂點的最短路徑。 該問題已解決,並且可以通過下面的鏈接從以下鏈接使用此代碼: http : //en.literateprograms.org/index.php?title=Special : DownloadCode/Dijkstra%27s_algorithm_(Java)&oldid=15444

我在從用戶輸入的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM