2012-08-12 174 views
-1

我得到這個錯誤...指數超出範圍

指數超出範圍。必須是非負數且小於集合的大小。
參數名稱:index

在指示位置的代碼中。

List<int>[] tetangga = new List<int>[this.observasi]; 
for (int i = 0; i < this.observasi; i++) 
{ 
    tetangga[i] = new List<int>(); 
    for (int j = 0; j < this.observasi; j++) 
    { 
     if (tableWeight[i, j] > 0) 
     { 
      tetangga[i].Add(j); 
     } 
    } 
} 

this.dataTable.ColumnCount = 2; 
this.dataTable.Columns[0].HeaderCell.Value = "REGION"; 
this.dataTable.Columns[1].HeaderCell.Value = "REGION NEIGHBOR"; 
this.dataTable.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable; 
this.dataTable.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; 
this.dataTable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 

int jlhRow = 0; 
for (int i = 0; i < this.observasi; i++) 
{ 
    jlhRow = jlhRow + tetangga[i].Count; 
} 
this.dataTable.RowCount = jlhRow; 

int row = 0; 
for (int k = 0; k < this.observasi; k++) 
{ 
    this.dataTable[0, row].Value = this.nameRegion[k]; // <-- error occurs here 
    for (int l = 0; l < tetangga[k].Count; l++) 
    { 
     this.dataTable[1, row].Value = this.nameRegion[tetangga[k][l]]; 
     row++; 
    } 
} 

任何人都可以向我解釋爲什麼?

+0

什麼是'this.nameRegion'?看起來很可疑。 – Marlon 2012-08-12 17:50:05

+1

請發佈完整的堆棧跟蹤,同時索引超出範圍是錯誤發生的,因爲他的索引你要訪問數組,這是更多的給定的分配大小的數組。 – greatmajestics 2012-08-12 17:50:20

+1

斷點的使用將幫助你。嘗試將斷點放入異常循環中,並在索引,數組和數據上添加監視。 – user35443 2012-08-12 17:59:21

回答

1

您的問題是在這裏

for (int j = 0; j < this.observasi; j++) 
    { 
     if (tableWeight[i, j] > 0) 
     { 
      tetangga[i].Add(j); 
     } 
    } 

我們如何知道什麼tableWeight的第二個維度是什麼?我預計它不會達到this.observasi。

0

把一個破發點,在你的循環的開始,前行:

this.dataTable[0, row].Value = this.nameRegion[k]; 

檢查在調試器dataTablenameRegion,你可能會回答你自己的問題。這些集合很可能不包含您指定的索引中的元素。