2012-08-12 120 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,你可能会回答你自己的问题。这些集合很可能不包含您指定的索引中的元素。