为什么这种反向阵列方法不起作用?
Why this reverse array method isnt working?
我正在尝试制作一种反转数组的方法,我不知道为什么它不起作用?
当我说 int[] arr = array
时,我想这样做,这样它就不会受到影响,所以我可以将元素用于第二个 for
循环,它应该有元素 {1,2,3,4,5,6}
但是当我使用
for (int i=array.Length-1;i>array.Length/2;i--)
{
array[i] = arr[array.Length - 1 - i];
}
在这种情况下,我有 6 个元素,所以 array.Length
是 6,因为我从 array.Length-1
开始,它必须从最后一个元素开始,它必须是 array[5]=arr[6-1-5]
,它必须是 array[5]=arr[0]
和 arr[0]
是 1,但我认为它是 6,为什么?
完整代码如下:
// ReverseArray method
static int [] ReverseArray(int [] array)
{
int[] arr = array;
for (int i=0; i<array.Length/2;i++)
{
array[i] = array[array.Length-1 - i];
}
for (int i=array.Length-1;i>array.Length/2;i--)
{
array[i] = arr[array.Length - 1 - i];
}
return array;
}
// Method for displaying elements of Array
static void DisplayArray(int [] array)
{
int i;
Console.Write("{");
for (i = 0; i < array.Length-1; i++)
{
Console.Write(array[i] + ",");
}
Console.WriteLine(array[i] + "}");
}
static void Main(string[] args)
{
int[] array = { 1, 2, 3, 4, 5 ,6};
ReverseArray(array);
DisplayArray(array);
Console.ReadKey();
}
您的反转方法无效:您的代码 copies[=20] 而不是 交换 索引 i
和 array.Length-1 - i
处的元素=] 数组的尾部部分放在初始部分上,实际上 "folding" 数组本身。
您需要删除第二个循环,并用交换替换赋值:创建一个临时变量,存储 array[i]
,复制 array[array.Length-1 - i]
,然后将临时变量写入它的位置。
忍不住自己写了一段代码试图解决
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
arr = Reverse(arr).ToArray();
这是实现该目标的较短方法。
public IEnumerable<int> Reverse(int[] arr)
{
for (int i = arr.Length-1; i >= 0; i--)
{
yield return arr[i];
}
}
我正在尝试制作一种反转数组的方法,我不知道为什么它不起作用?
当我说 int[] arr = array
时,我想这样做,这样它就不会受到影响,所以我可以将元素用于第二个 for
循环,它应该有元素 {1,2,3,4,5,6}
但是当我使用
for (int i=array.Length-1;i>array.Length/2;i--)
{
array[i] = arr[array.Length - 1 - i];
}
在这种情况下,我有 6 个元素,所以 array.Length
是 6,因为我从 array.Length-1
开始,它必须从最后一个元素开始,它必须是 array[5]=arr[6-1-5]
,它必须是 array[5]=arr[0]
和 arr[0]
是 1,但我认为它是 6,为什么?
完整代码如下:
// ReverseArray method
static int [] ReverseArray(int [] array)
{
int[] arr = array;
for (int i=0; i<array.Length/2;i++)
{
array[i] = array[array.Length-1 - i];
}
for (int i=array.Length-1;i>array.Length/2;i--)
{
array[i] = arr[array.Length - 1 - i];
}
return array;
}
// Method for displaying elements of Array
static void DisplayArray(int [] array)
{
int i;
Console.Write("{");
for (i = 0; i < array.Length-1; i++)
{
Console.Write(array[i] + ",");
}
Console.WriteLine(array[i] + "}");
}
static void Main(string[] args)
{
int[] array = { 1, 2, 3, 4, 5 ,6};
ReverseArray(array);
DisplayArray(array);
Console.ReadKey();
}
您的反转方法无效:您的代码 copies[=20] 而不是 交换 索引 i
和 array.Length-1 - i
处的元素=] 数组的尾部部分放在初始部分上,实际上 "folding" 数组本身。
您需要删除第二个循环,并用交换替换赋值:创建一个临时变量,存储 array[i]
,复制 array[array.Length-1 - i]
,然后将临时变量写入它的位置。
忍不住自己写了一段代码试图解决
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
arr = Reverse(arr).ToArray();
这是实现该目标的较短方法。
public IEnumerable<int> Reverse(int[] arr)
{
for (int i = arr.Length-1; i >= 0; i--)
{
yield return arr[i];
}
}