2011-11-18 126 views
11
for(int k=0;k <= odds.GetLength(-1);k++) 

上面的代码行应该遍历Double类型的二维数组,但会一直抛出以下异常。索引超出范围例外。有人会善意解释为什么并提供解决方案。非常感谢。迭代2维数组c#

+0

你是否在循环中的任何点更改'赔率'的内容? – ChrisBint

+0

我认为你应该添加更多的代码。也许你可以使用foreach? –

+0

是以下面的方式'code'win + = odds [1,k] * unitStake; 'code' – user995689

回答

35

您正在向GetLength传递无效索引。多维数组的维数基于0,因此-1无效,并且使用负数(或大于维数 - 1的数字)将导致IndexOutOfRangeException

这将环比第一尺寸:

for(int k=0;k < odds.GetLength(0);k++) 

您需要添加另一个循环都要经过第二个维度:

for(int k=0;k < odds.GetLength(0);k++) 
    for(int l=0;l < odds.GetLength(1);l++) 
     var val = odds[k,l]; 
+0

绝对精彩!非常感谢你! – user995689

+0

循环的条件部分应指定'<'而不是'<=',否则您将退出索引异常。 – John

+0

@John - 谢谢。你可以建议直接编辑:) – Oded

3

如果odds是一个二维数组,那么它的尺寸将被称为01。尝试访问维度-1将产生一个IndexOutOfRangeException

1

GetLength是从零开始的。尝试拨打GetLength(0)

3

好,usualy当你要遍历一个二维数组:

for(int col = 0; col < arr.GetLength(0); col++) 
    for(int i = row; row < arr.GetLength(1); row++) 
     arr[col,row] = /*something*/; 

数组是始终从零开始,所以没有尝试在-1指数得到的东西点。

0

我看到一个或两个问题根据打算如何使用它:

首先,对GetLength(IND尺寸)返回指定的尺寸的长度,从0开始在一个二维阵列的情况下,正确的索引将是0和1.

第二个问题是,您正在做< =而不是< for循环条件,这可能也超出了自上一个索引是长度为1,而不是长度的边界。

StriplingWarrior和Gilad Naaman发布了代码示例,所以我将跳过它。

+0

谢谢你指出<=这个问题到目前为止我还没有明确的问题,但现在你的评论已经有所帮助了。 TY。 – user995689

2
string[,] arr = new string[2, 3]; 
     arr[0, 0] = "0,0"; 
     arr[0, 1] = "0,1"; 
     arr[0, 2] = "0,2"; 

     arr[1, 0] = "1,0"; 
     arr[1, 1] = "1,1"; 
     arr[1, 2] = "1,2"; 

     for (int i = 0; i < arr.GetLength(0); i++) 
     { 
      for (int j = 0; j < arr.GetLength(1); j++) 
      { 
       Response.Write(string.Format("{0}\t", arr[i, j])); 
      } 
      Response.Write("<br/>"); 
     }