反转int数组return错误的元素
Reverse int array return wrong element
这里有一个简单的C#方法来反转数组的元素。例如,如果我输入 {1,2,3,4},结果应该是 {4,3,2,1}。
public int[] reverse(int[] array)
{
int[] new_array = new int[array.Length];
for (int i = 0; i < array.Length-1; i++)
{
new_array[i] = array[array.Length-1 - i];
}
return new_array;
}
但是,当我 运行 它并给出输入 {1,2,3,4}
时,结果是 {4,3,2,0}
,为什么最后一个元素变成 0
而不是 1
?
您遇到的问题是您正在检查数组长度并减一。
for (int i = 0; i < array.Length - 1; i++)
这表示如果 I 小于数组的长度减一。你永远不会检查数组中的最后一个元素。
这样理解起来可能稍微容易一些。我基本上是 运行 我的 for 循环向后并为新数组和原始数组保留一个计数器。
var array = new int[] { 1, 2, 3, 4 };
int[] new_array = new int[array.Length];
for (int i = array.Length -1, n=0 ; i >= 0 ; i--,n++)
{
new_array[n] = array[i];
}
此处存在问题 (int i = 0; i < array.Length-1; i++)。
如果要将它与 Length-1
进行比较,则必须使用 <=
或使用 <
符号与 Length
试试这个代码。
public int[] reverse(int[] array)
{
int[] new_array = new int[array.Length];
for (int i = 0; i < array.Length; i++)
{
new_array[i] = array[array.Length-1 - i];
}
return new_array;
}
你不需要 array.Length-1
因为这会 beyond the index of array
所以只需要 array.Length
就够了。
int[] array = new int[4] { 4, 3, 2, 1 };
int[] new_array = new int[array.Length];
for (int i = 0; i< array.Length; i++)
{
new_array[i] = array[(array.Length - 1) - i];
}
你可以使用 Linq 而不是写太多行代码
正在使用
using System.Linq;
反转数组
var reverse = array.Reverse();
或
int[] reverse = array.Reverse().ToArray();
试试这个:
for (int i = array.Length - 1,j=0; i >= 0; i--,j++)
{
new_array[j] = array[i];
}
这里有一个简单的C#方法来反转数组的元素。例如,如果我输入 {1,2,3,4},结果应该是 {4,3,2,1}。
public int[] reverse(int[] array)
{
int[] new_array = new int[array.Length];
for (int i = 0; i < array.Length-1; i++)
{
new_array[i] = array[array.Length-1 - i];
}
return new_array;
}
但是,当我 运行 它并给出输入 {1,2,3,4}
时,结果是 {4,3,2,0}
,为什么最后一个元素变成 0
而不是 1
?
您遇到的问题是您正在检查数组长度并减一。
for (int i = 0; i < array.Length - 1; i++)
这表示如果 I 小于数组的长度减一。你永远不会检查数组中的最后一个元素。
这样理解起来可能稍微容易一些。我基本上是 运行 我的 for 循环向后并为新数组和原始数组保留一个计数器。
var array = new int[] { 1, 2, 3, 4 };
int[] new_array = new int[array.Length];
for (int i = array.Length -1, n=0 ; i >= 0 ; i--,n++)
{
new_array[n] = array[i];
}
此处存在问题 (int i = 0; i < array.Length-1; i++)。
如果要将它与 Length-1
进行比较,则必须使用 <=
或使用 <
符号与 Length
试试这个代码。
public int[] reverse(int[] array)
{
int[] new_array = new int[array.Length];
for (int i = 0; i < array.Length; i++)
{
new_array[i] = array[array.Length-1 - i];
}
return new_array;
}
你不需要 array.Length-1
因为这会 beyond the index of array
所以只需要 array.Length
就够了。
int[] array = new int[4] { 4, 3, 2, 1 };
int[] new_array = new int[array.Length];
for (int i = 0; i< array.Length; i++)
{
new_array[i] = array[(array.Length - 1) - i];
}
你可以使用 Linq 而不是写太多行代码
正在使用
using System.Linq;
反转数组
var reverse = array.Reverse();
或
int[] reverse = array.Reverse().ToArray();
试试这个:
for (int i = array.Length - 1,j=0; i >= 0; i--,j++)
{
new_array[j] = array[i];
}