我已经构建了一个像以下
这样的矩阵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元素,所以我可以将客户端元素和供应商元素与我的节点。
答案 0 :(得分:1)
好的,再次浏览你的代码我才意识到你所做的和你想做的事情是两回事。你想要的是一个数组数组。你拥有的是一组数组数组......
看看你的代码。 matrix是一个ArrayList,为每个节点添加一个新的ArrayList到矩阵。此时您已经拥有2个维度。在为每个节点添加ArrayList到矩阵时,您还要浏览新创建的ArrayList,并为每个节点添加另一个ArrayList。所以最后你有(n2)+1个ArrayLists,其中n是节点数。而且我很确定你不希望这样: - )
我再次建议您坚持使用简单的bool [] []并从字典中获取节点名称。或者,如果bool没有剪切它,你可以使用float [] []作为加权连接矩阵。
答案 1 :(得分:0)
因此,如果我理解正确,您将拥有一个包含ArrayLists的ArrayList。将matrix [i]的内容转换为字符串是行不通的。尝试将其更改为矩阵[i] [0]为初学者,并告诉发生了什么。