0

我有以下数组:

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:索引超出了数组的范围。

那么可能有什么问题呢?

4

4 回答 4

5

i为零时,您访问索引处newposition等于的数组length;这超出了数组的最后一个有效索引,即0through length-1

这将解决问题:

int newposition = length - i - 1;
于 2012-10-19T01:51:57.967 回答
2

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

另外,请参阅这篇关于反转字符串的帖子。从那个帖子...

public static string Reverse( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}
于 2012-10-19T01:53:58.127 回答
1

你要去远方,

for (int i = 0; i < length-1; i++)
于 2012-10-19T01:52:00.453 回答
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);
}
于 2012-10-19T01:58:05.567 回答