C# 反向整数数组返回错误的元素

C# 反向整数数组返回错误的元素,c#,arrays,reverse,C#,Arrays,Reverse,下面是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]; }

下面是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;
}
public int[]反向(int[]数组)
{
int[]new_array=new int[array.Length];
for(int i=0;i

但是,当我运行它并以
{1,2,3,4}
的形式输入时,它会导致
{4,3,2,0}
,为什么最后一个元素会变成
0
,而不是
1

您遇到的问题是检查数组长度并减去一个

for(int i=0;i 这表示如果我小于数组的长度减1。因此,您永远不会检查数组中的最后一个元素

这可能更容易理解。我基本上是向后运行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;i++)。
您必须使用
您不需要
数组.Length-1
,因为这将
超出数组的索引
,所以只有
数组.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];
}
int[]数组=新的int[4]{4,3,2,1};
int[]new_array=new int[array.Length];
for(int i=0;i
您可以使用Linq,而不是编写太多的代码行

使用 反转数组 或 试试这个:

for (int i = array.Length - 1,j=0; i >= 0; i--,j++)
{
  new_array[j] = array[i];
}

这是家庭作业还是什么?因为在.Net
Array.Reverse()中有一个错误,所以在
for
循环中有一个off-by-one错误。您从未尝试设置最后一个元素。从长度中减去1或使用
因为逻辑。与i
do
i
BTW不同,只需调试应用程序就可以轻松发现此错误。调试是您的任务friend@Mairaj为什么不呢?因为这是不正确的。这将从一个数组中的索引
i
中获取项目,并将其放在另一个数组中的相同位置。。。这只是从最后一个元素到第一个元素的复制,而不是相反。如果您解释了差异以及问题所在,可能会更容易理解。没有更好的地方。“小于或等于”<代码>确认!在-1失控之前尝试将其更新为fast:)这是错误的,因为在对问题的评论中给出了原因。这就是你的新数组和旧数组将是相同的,这不是问题所要求的。@Chris我没有看到评论说OP希望修改相同的数组。没有,但你的新数组的顺序不是相反的。新阵列的顺序与原始阵列的顺序完全相同。我还注意到您现在已经对排序发表了评论。这将破坏原始顺序,使其无法在此时反转…您的新阵列将与旧阵列相同。如果你解释了你所做的改变是为了做什么(你应该在一个好的回答中这样做),那么你就会意识到它没有做正确的事情。非常抱歉这个大错误,谢谢@Chris通知我,我纠正了我的错误。仍然可以口头解释一下你做了哪些不同的事情,以及为什么它会比原来的更好。一个好的答案不仅能提供有效的代码,还能提供避免将来出现问题所需的知识。
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];
}