2012-10-19 218 views
0

我有以下的数组: -System.IndexOutOfRangeException:索引阵列的边界之外

public string reArrange(string s) 
     { 
      char[] array = s.ToCharArray(); 
      int length = array.Length; 
      char[] arranged = new char[length]; 
      for (int i = 0; i < length; i++) 
      { 
       int newposition = length - i; 
       arranged[newposition] = array[i]; 
      } 
      return new string(arranged); 
     } 

但上述方法就会产生以下错误: -

System.IndexOutOfRangeException:索引在阵列的边界之外.. 那么可能会出现什么问题? BR

回答

4

i时是零,可以访问在其等于length索引newposition阵列;这是超出数组最后一个有效索引的那个,它是0length-1

这将解决这个问题:

int newposition = length - i - 1; 
1

你要远,

for (int i = 0; i < length-1; i++) 
+0

但这种方式我不能达到数组中的最后一个元素...... –

+0

它应该是'我= 1'到'length',而不是'I = 0'到'length - 1' – mlorbetske

+0

它会吹双方 –

2

说出长度为10个字符。 在循环的第一次迭代中,newposition = 10 - 0 = 10。此索引超出了排列数组的范围。

另请参阅this post关于反转字符串。从这个帖子...

public static string Reverse(string s) 
{ 
    char[] charArray = s.ToCharArray(); 
    Array.Reverse(charArray); 
    return new string(charArray); 
} 
+0

+1击败我,以“更好”的方式扭转。 =) –

1
public string reArrange(string s) 
{ 
    char[] array = s.ToCharArray(); 
    int length = array.Length; 
    char[] arranged = new char[length]; 

    for (int i = 0; i < length; i++) 
    { 
     int newposition = length - i - 1; 
     arranged[newposition] = array[i]; 
    } 
    return new string(arranged); 
} 
+1

但在这种情况下,我将无法到达数组中的最后一个元素[] –

+0

数组中的最后一个元素位于索引'length - 1'处。假设数组长度为3,在'i = 0','newposition = 3 - 0 - 1 = 2'(length - 1),'i = 2'(length - 1),'newposition = 3如果数组长度是5,那么使用(i <长度-1),我将永远不会使用'2_1 = 0'在'i = 1','newposition = 3 - 1 - 1 = 1',覆盖所有有效索引 – mlorbetske

+0

到达阵列[4] !!! –

相关问题