2012-05-30 289 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];' –