【问题标题】:how to return int array C#如何返回int数组C#
【发布时间】:2015-06-03 20:52:18
【问题描述】:

我学习 c#,但我的功能有问题。 它应该将选项卡数组的元素乘以 mnoznik 并返回输出选项卡,我尝试了很多方法但仍然不知道如何解决它。

    static int mnozenie(int[] tab, int mnoznik)
    {
        int[] wyj;
        wyj = new int[tab.Length];
        if (mnoznik != 0)
        {
            for (int i = 0; i < tab.Length; i++)
                wyj[i] = tab[i] * mnoznik;
            return wyj[];
        }
        else
            return 0;
    }

【问题讨论】:

  • 将您的返回类型设为int[][],并在其他部分返回null

标签: c# arrays return


【解决方案1】:

试试

static int[] mnozenie(int[] tab, int mnoznik)
{
    int[] wyj = new int[tab.Length];
    if (mnoznik != 0)
    {
        for (int i = 0; i < tab.Length; i++)
            wyj[i] = tab[i] * mnoznik;
    }
    return wyj;

}

【讨论】:

  • 如果输入 mnoznik 为 0,则 OP 想要值 0。恕我直言,这意味着始终使用 return wyj; 并跳过乘法循环如果 mnoznik 是0.
【解决方案2】:

您正在尝试返回一个数组和一个整数,这是您做不到的。您可以将其全部包装在 Tuple 中并返回两者,或者在 mnoznik 为 0 的情况下返回 null。

类似:

static Tuple<bool,int[]> mnozenie(int[] tab, int mnoznik)
{
    return (mnoznik == 0)
           ? new Tuple<bool,int[]>(false, new [] { 0 })
           : new Tuple<bool,int[]>(true, tab.Select(i => i*mnoznik).ToArray());
}

static int mnozenie(int[] tab, int mnoznik)
{
    return (mnoznik == 0)
           ? null
           : tab.Select(i => i*mnoznik).ToArray();
}

【讨论】:

  • 在你的第二个例子中有方法 int 返回类型和你返回 int 数组
  • 那是一个错字。我应该写 int[]。另一件事是,您可能会返回一个定义明确的数组,而不是 null,就像我在第一个示例中所做的那样:new [] { 0 };
【解决方案3】:
static int[] mnozenie(int[] tab, int mnoznik)
{
    if (tab.Length > 0)
    {
        for (int i = 0; i < tab.Length; i++)
        {
            tab[i] *= mnoznik;
        }
        return tab;
    }
    return null;
}

或者,不是返回 null 而是返回 tabif 块只是防止尝试访问空集合,或者只是以您选择的任何方式处理异常。

【讨论】:

  • 或者不是 return null 只是返回 tab,if 块只是防止尝试访问 null 集合,或者只是以您选择的任何方式处理异常。
  • 你在哪里存储乘法结果?
  • 是的,你将结果分配给从未声明过的本地字段项......在原始方法中是存储在数组中的乘法结果
  • 很抱歉,但这并不准确。如果从未声明原始 int[] 选项卡,则使用 if 块处理,如果已声明,则存储元素中每个元素的乘法结果并将新的 int[] 选项卡传回。事实上,声明另一个 int[] 或更多变量将完全浪费资源,因为它们是不需要的。
  • 此外,欢迎甚至鼓励您测试上面的代码,看看它是否有效。
【解决方案4】:

此代码可以帮助您 试试看

   static int[] m(int[] a , int low , int big) 
      {
        int[] re = new int[2];
        int min, max, mid ;
        if (low == big)
        {
            min = max = a[low];
            re[0] = min;
            re[1] = max;
            return (re);
        }
      }

【讨论】:

    【解决方案5】:

    如果我错了,请纠正我,但如果返回数组或 c#/c++ 中的任何类型的元素,我有 90% 的把握。编译器实际上并没有真正将堆栈中的值本身从一个内存位置移动到另一个内存位置,它只是将指针/句柄推送到该特定内存,信息存储在堆栈中。

    通过指定

    返回 wyj[];

    您实际上是在尝试返回数组本身,而不是指针。这将是非法的,但我只是删除了方形支架,你正在移动指针,编译器是happycamper。 [编辑:漏词]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2012-05-03
      • 2016-06-22
      • 2021-03-29
      相关资源
      最近更新 更多