我建立像下面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();
}
}
}
爲什麼它不打印我至少節點的名稱,我找不到錯誤,爲什麼它不起作用。 謝謝你的幫助。
在節點列表我得到的字符串和鏈表包含連接器元件,這樣我可以比較客戶端的元素,並與我的節點的供應商元素節點的名稱。
二維數組有行,每行有列,每列包含一個值,沒有任何兩個* for循環*不能解決 – Shai
是否有您所使用的ArrayList的一個ArrayList,而不僅僅是一個二維的理由布爾陣列?對於名稱,您可以簡單地添加兩個字典以從名稱中獲取索引。這應該可以節省大量的內存。 –
@Defi我編輯了我的評論以考慮到這一點:-) –