2012-05-30 230 views
1

我建立像下面console.writeLine(矩陣)二維陣列字符串[,]

00 node1 node2 node3 
node1 0 1  0 
node2 1 1  1 
node3 0 0  0 

我決定String[,] matrix做的矩陣。我希望下面的代碼能夠得到我想要的矩陣,但是當我編譯它時,它只打印出「節點i」和「節點j」其他任何東西。

public AdjMatrix(ArrayList nodeList,ArrayList linkList) 
     { 
      String[,] matrix = new String [nodeList.Count,nodeList.Count]; 
      ArrayList result = new ArrayList(); 

      using (StreamWriter writer = new StreamWriter("C:\\Users\\Martina\\Desktop\\matrix.txt")) 
      { 
       Console.SetOut(writer); 


       //inizializzazione dei nomi delle classi 
       for (int i = 0; i < nodeList.Count; i++) 
       { 
        if (i == 0) 
        { 
         matrix[i,0]=(""); 
        } 
        else 
        { 
         foreach (EA.Element node in nodeList) 
         { 
          matrix[i,0] = node.Name; 
         } 
         Console.WriteLine("la riga della matrice" + matrix[i,0]); 
        } 
       } 

       //inizializzazione dei valori della matrice 
       for (int j = 0; j < nodeList.Count; j++) 
       { 
        if (j==0) 
        { 
         matrix[0,j]=(""); 
        } 
        else 
        { 
         foreach (EA.Element node in nodeList) 
         { 
          matrix[0,j] = node.Name; 
         } 
         Console.WriteLine("la riga della matrice" + matrix[0,j]); 
        } 
       } 


       //definizione dell'esistenza del link 
       foreach (EA.Connector link in linkList) 
       { 
        for (int i = 1; i < nodeList.Count; i++) 
        { 
         int supplier = link.SupplierID; 
         int client = link.ClientID; 

         String supplierNode = modelRepository.GetElementByID(supplier).Name; 
         String clientNode = modelRepository.GetElementByID(client).Name; 


         if (supplierNode.Equals((String)matrix[i,0])) 
         { 
          for (int j = 1; j < nodeList.Count; j++) 
          { 
           if (clientNode.Equals((String)matrix[0,j])) 
           { 
            matrix[i,j] = "1"; 
           } 
           else 
           { 
            matrix[i,j] = "0"; 
           } 
          } 
         } 
        } 
       } 


       Console.WriteLine("matrix : "); 
      for (int i = 0; i < nodeList.Count; i++) 
      { 
       for (int j = 0; j < nodeList.Count; j++) 
        Console.Write(matrix[i, j] + "\t"); 
        Console.WriteLine(); 
      } 
      } 
     } 

爲什麼它不打印我至少節點的名稱,我找不到錯誤,爲什麼它不起作用。 謝謝你的幫助。

節點列表我得到的字符串和鏈表包含連接器元件,這樣我可以比較客戶端的元素,並與我的節點的供應商元素節點的名稱。

+0

二維數組有行,每行有列,每列包含一個值,沒有任何兩個* for循環*不能解決 – Shai

+0

是否有您所使用的ArrayList的一個ArrayList,而不僅僅是一個二維的理由布爾陣列?對於名稱,您可以簡單地添加兩個字典以從名稱中獲取索引。這應該可以節省大量的內存。 –

+0

@Defi我編輯了我的評論以考慮到這一點:-) –

回答

1

好了,你的代碼會再次我只是意識到你做什麼,你想要做什麼是兩回事。你想要的是一組數組。你有什麼是數組的數組的數組...

看看你的代碼。矩陣是一個ArrayList,併爲每個節點添加一個新的ArrayList到矩陣。此時你已經有了2個維度。在將每個節點的ArrayList添加到矩陣的同時,您還要通過新創建的ArrayList併爲每個節點添加另一個ArrayList。所以最後你有(n2)+1 ArrayLists其中n是節點的數量。而且我敢肯定,你不希望:-)

我再次建議你堅持一個簡單的布爾[] [],並從字典節點名稱。或者,如果bools不削減它,你可以使用float [] []作爲加權連接矩陣。

+0

我開始檢討矩陣的整個代碼,我注意到有一個分配一個陣列表太多了。謝謝你的注意,你非常的幫助我,非常感謝你。我現在要嘗試解決它。我希望它能起作用。 – Defi

+0

如果有幫助,請將我的答案標記爲正確:-D –

0

所以,如果我理解正確的話,你必須包含的ArrayLists的ArrayList。將矩陣[i]的內容轉換爲字符串無法工作。嘗試將其改爲矩陣[i] [0],並告訴發生了什麼。

+0

啊,現在,你在做什麼是你在矩陣[i]的ArrayList,把它轉換成一個字符串,並從這個字符串中選擇第一個[0]字符。這反過來將不得不被明確地轉換成一個字符串。但由於這是不是你想要的,你必須寫'字符串節點=(字符串)矩陣[I] [0];' –