3

我想将 int a[] 值传递给 int b[]。但我面临着困惑。任何人都可以纠正我。b 的输出为 0,0,0,45,4,2,1。它应该像 7,6,5,4,45,2,1。

static void Main()
{
    int[] a = new int[] { 1, 2, 45, 4, 5, 6, 7 };
    int[] b = new int[7];
    int temp = 0;

    for (int i = 0; i <= a.Length - 1; i++)
    {
        b[(b.Length - i) - 1] = a[i];

        Console.WriteLine(b[i]);
    }     
}   
4

3 回答 3

7

这里的问题是您从 的最后一个索引开始插入项目b,但您从第一个索引开始输出它们。复制项目的代码是正确的,但是您需要调整将结果输出到控制台的行,以b使用您刚刚用于插入项目的相同索引来显示项目。

请注意,您还可以进行一些其他改进,例如使用数组初始化语法 for a,使用a.Lengthto 实例化b而不是硬编码数字,删除未使用的temp变量,使用i < a.Lengthforfor条件(而不是i <= Length - 1,它对每次迭代),并将b索引存储在变量中而不是计算两次:

static void Main()
{
    int[] a = new int[] {1, 2, 45, 4, 5, 6, 7};
    int[] b = new int[a.Length];

    for (int i = 0; i < a.Length; i++)
    {
        int bIndex = b.Length - i - 1;
        b[bIndex] = a[i];
        Console.WriteLine(b[bIndex]);
    }

    Console.ReadLine();
}

但是,这仍将按照您插入它们的顺序输出项目,这将与它们在 中出现的顺序相同a。如果要显示 中的项目b与 相反a,最简单的方法是在填充后执行b。请注意,我们可以使用string.Join此处的方法将每个项目用逗号连接起来:

static void Main()
{
    int[] a = new int[] {1, 2, 45, 4, 5, 6, 7};
    int[] b = new int[a.Length];

    for (int i = 0; i < a.Length; i++)
    {
        b[b.Length - i - 1] = a[i];
    }

    Console.WriteLine($"'a' array: {string.Join(",", a)}");
    Console.WriteLine($"'b' array: {string.Join(",", b)}");

    Console.ReadLine();
}

输出

在此处输入图像描述

于 2018-12-31T22:21:10.370 回答
4

如果要从现有数组创建反向数组,可以使用Reverse扩展方法:

//using System.Linq;
int[] a = new int[] { 1, 2, 45, 4, 5, 6, 7 };
int[] b = a.Reverse().ToArray();

您可以了解有关扩展方法的更多信息。

于 2018-12-31T22:30:09.163 回答
3

你可以有这个语法

int[] a = {1, 2, 45, 4, 5, 6, 7};
int[] b = new int[7];

for (int i = 0, j = b.Length - 1; i < a.Length; i++, j--)
{
    b[i] = a[j];
    Console.WriteLine(b[i]);
}
于 2018-12-31T22:36:08.493 回答