console.writeLine(matrix)bidimensional array String [,]

时间:2012-05-30 10:53:03

标签: c# matrix console.writeline

我已经构建了一个像以下

这样的矩阵
00   node1 node2 node3
node1  0    1     0
node2  1    1     1
node3  0    0     0

我决定用String[,] matrix来做。我希望以下代码能够获得我想要的矩阵,但是当我编译它时,它只打印出“node i”和“node 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();
            }
            }
         }

为什么它不打印我至少节点的名称,我找不到错误,为什么它不起作用。 谢谢你的帮助。

nodeList 中,我得到了Strings节点的名称,而 linkList 包含了Connector元素,所以我可以将客户端元素和供应商元素与我的节点。

2 个答案:

答案 0 :(得分:1)

好的,再次浏览你的代码我才意识到你所做的和你想做的事情是两回事。你想要的是一个数组数组。你拥有的是一组数组数组......

看看你的代码。 matrix是一个ArrayList,为每个节点添加一个新的ArrayList到矩阵。此时您已经拥有2个维度。在为每个节点添加ArrayList到矩阵时,您还要浏览新创建的ArrayList,并为每个节点添加另一个ArrayList。所以最后你有(n2)+1个ArrayLists,其中n是节点数。而且我很确定你不希望这样: - )

我再次建议您坚持使用简单的bool [] []并从字典中获取节点名称。或者,如果bool没有剪切它,你可以使用float [] []作为加权连接矩阵。

答案 1 :(得分:0)

因此,如果我理解正确,您将拥有一个包含ArrayLists的ArrayList。将matrix [i]的内容转换为字符串是行不通的。尝试将其更改为矩阵[i] [0]为初学者,并告诉发生了什么。