-2

我正在制作一个应用程序,它将为我提供用户插入的数字的平均值、中值和范围。
但我似乎无法将数字相加,然后将它们除以二。
这是我尝试的:

    public static String Find_Mean()
    {
        int Number = 0;
        for (int size = 0; size < list.Count; size++)
        {
            Number = Convert.ToInt16(list[size].ToString());
            Number += Number;
        }
        int Final_Number = Number / 2;
        return Convert.ToString(Final_Number);
    }

我想要做的是将arraylist中的所有数字加在一起,然后将它们除以2。

4

6 回答 6

3

尝试使用 Linq:

 int[] x;
 x.Average();
 x.Max();
 x.Min();
于 2013-02-04T07:52:09.173 回答
3
Number = Convert.ToInt32(list[size].ToString());

您在这里的每次迭代都会覆盖 number 的值。

于 2013-02-04T07:53:27.577 回答
1

每次你Number在循环中设置你的数组列表元素并覆盖你的总数时,这就是你没有得到总数的原因。您需要使用单独的变量来维护总计。就像是:

int Number = 0;
int Total = 0;
for (int size = 0; size < list.Count; size++)
{
    Number = Convert.ToInt16(list[size].ToString());
    Total += Number;
}
int Final_Number = Total / 2;

如果您使用的是.Net 2.0 或更高版本,那么最好使用通用列表List<int>

您还可以将转换为循环中的数字更改为:

Number = Convert.ToInt32(list[0]);

由于Convert.ToInt32对象类型也有重载,如果你的数字是 type int,那么它Int32不是Int16

于 2013-02-04T07:52:43.620 回答
1

您在此处重新分配 Number 的值:

for (int size = 0; size < list.Count; size++)
{
    Number = Convert.ToInt16(list[size].ToString());
    Number += Number;
}     

试试这个:

for (int size = 0; size < list.Count; size++)
{
    Number += Convert.ToInt16(list[size].ToString());
}     
于 2013-02-04T07:57:39.897 回答
0

这是我目前用来计算一些简单统计数据的方法:

private void CalculateStatistics(IEnumerable<Double> valuesToAggregate)
{
    // We need to iterate multiple times over the values, so it makes
    // sense to create a list to improve performance.
    var aggregateMe = valuesToAggregate.ToList();

    if (aggregateMe.Count > 0)
    {
        // To calculate the median, the simplest approach
        // is to sort the list.
        aggregateMe.Sort();

        // Cause we already sorted the list,
        // the min value must be available within the first element.
        Min = aggregateMe[0];

        // the max value must be available within the last element.
        Max = aggregateMe[aggregateMe.Count - 1];

        // The average has really to be calculated, by another iteration run.
        Mean = aggregateMe.Average();

        // Taking the median from a sorted list is easy.
        var midpoint = (aggregateMe.Count - 1) / 2;
        Median = aggregateMe[midpoint];

        // If the list contains a even number of element,
        // the median is the average of the two elements around the midpoint.
        if (aggregateMe.Count % 2 == 0)
            Median = (Median + aggregateMe[midpoint + 1]) / 2;
    }
    else
    {
        // There is no value available to calculate some statistic.
        Min = Double.NaN;
        Max = Double.NaN;
        Mean = Double.NaN;
        Median = Double.NaN;
    }
}

请注意,您可能可以改进此特定实现,具体取决于您获取的数据类型(字符串、双精度值等)以及它们是如何存储的(它们是否已经作为允许操作的列表进入等等? )。

于 2013-02-04T08:07:20.757 回答
0
public static String Find_Mean()
{
    List<int> integerList = list.Select(q => int.Parse(q)).ToList();
    var result = integerList.Sum() / 2;
    return result.ToString();
}
于 2013-02-04T08:12:29.023 回答