【问题标题】:How can I return the sum and average of an int array?如何返回 int 数组的总和和平均值?
【发布时间】:2012-10-18 08:06:19
【问题描述】:

我需要定义两个方法来返回 int 数组的 sumaverage。方法定义如下:-

public int Sum(params int[] customerssalary)
{
           
         // I tried the following but it fails   return customerssalary.sum();
}

另一个问题是,如何返回这些 int 值的平均值?

【问题讨论】:

  • 您确定return ints.sum(); 不起作用?为什么这不起作用?!?!?
  • 对不起,我的意思是customerssalary.sum();没有工作
  • 亲爱的,我猜你使用的是 .net 2.0 .. 所以请先检查一下

标签: c#


【解决方案1】:
customerssalary.Average();
customerssalary.Sum();

【讨论】:

  • 最好和最简单的方法。需要 Linq
【解决方案2】:

这是你应该这样做的方式,我这么说是因为你显然是 C# 的新手,应该尝试理解一些基本的东西是如何工作的!

public int Sum(params int[] customerssalary)
{
   int result = 0;

   for(int i = 0; i < customerssalary.Length; i++)
   {
      result += customerssalary[i];
   }

   return result;
}

有了这个Sum 函数,你也可以用它来计算平均值...

public decimal Average(params int[] customerssalary)
{
   int sum = Sum(customerssalary);
   decimal result = (decimal)sum / customerssalary.Length;
   return result;
}

在第二个函数中使用decimal类型的原因是因为除法很容易返回非整数结果


其他人提供了一个 Linq 替代方案,无论如何我都会使用它,但是对于 Linq,无论如何拥有自己的功能是没有意义的。我假设你被要求实现这些功能作为一项任务来证明你对 C# 的理解,但我可能错了。

【讨论】:

  • decimal result = sum / customerssalary.Length 会将除法计算为整数,然后将其存储为小数。在执行除法之前,您需要将两个参数之一转换为小数/浮点数/任何值。
  • @Rawling:嗯?...不知道你的意思:P
  • 如果你有ints aba/b 执行整数除法(例如7/2 给出3)。不管你将它存储在int 还是decimal 中,它仍然执行整数除法。
  • @Rawling... 是的,我的评论是个玩笑,也许您可​​以看到我已经在您的建议后更改了它
  • 讽刺检测今天早上明显离线:-/对不起!
【解决方案3】:

使用ints.sum()有两个问题:

  • 变量名为customerssalary,而不是ints
  • C# 区分大小写 - 该方法称为 Sum(),而不是 sum()

另外,你需要一个 using 指令

using System.Linq;

得到总和后,您只需除以数组的长度即可得到平均值 - 您无需使用Average(),它将再次遍历数组。

int sum = customerssalary.Sum();
int average = sum / customerssalary.Length;

double:

double average = ((double) sum) / customerssalary.Length;

【讨论】:

  • (对不起,如果问错地方了)当使用Average方法时,它返回一个小数,但这里和MSDN上的推荐似乎是双倍我能问为什么吗?
  • 啊,解决了,这取决于输入,我会把这个评论留在这里给其他有同样想法的人。
  • +1 用于提及using System.Linq;,因为如果缺少它,Visual Studio 不会自动添加。
【解决方案4】:

虽然上面所有的答案都是正确的,但我想提供以下解决方案,其中包括一个空检查:

decimal sum = (customerssalary == null) ? 0 : customerssalary.Sum();
decimal avg = (customerssalary == null) ? 0 : customerssalary.Average();

【讨论】:

    【解决方案5】:

    您尝试了错误的变量,ints 不是正确的参数名称。

    public int Sum(params int[] customerssalary)
    {
        return customerssalary.Sum();
    }
    
    public double Avg(params int[] customerssalary)
    {
        return customerssalary.Average();
    }
    

    但是你觉得这些方法真的有必要吗?

    【讨论】:

    • 我认为如果他想通过他的家庭作业,他们将是必要的;-)
    【解决方案6】:

    如果您使用的是 Visual Studio 2005,那么

    public void sumAverageElements(int[] arr)
    {
         int size =arr.Length;
         int sum = 0;
         int average = 0;
    
         for (int i = 0; i < size; i++)
         {
              sum += arr[i];
         }
    
         average = sum / size; // sum divided by total elements in array
    
         Console.WriteLine("The Sum Of Array Elements Is : " + sum);
         Console.WriteLine("The Average Of Array Elements Is : " + average);
    }
    

    【讨论】:

    • 是的...这对于 return 来自 two 函数的值并没有真正的帮助。另外,如果平均值是非整数值呢?
    • 这个方法可以一分为二。我只是提供逻辑而已。
    【解决方案7】:

    我参考了很多结果并修改了我的代码以使其正常工作

    foreach (var rate in rateing)
                    {
                        sum += Convert.ToInt32(rate.Rate);
                    }
                    if(rateing.Count()!= 0)
                    {
                        float avg = (float)sum / (float)rateing.Count();
                        saloonusers.Rate = avg;
                    }
                    else
                    {
                        saloonusers.Rate = (float)0.0;
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      相关资源
      最近更新 更多