2012-10-19 215 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] !!! –

相關問題