将数组列表中的数字相加
本文关键字:数字 数组 列表 | 更新日期: 2023-09-27 17:57:15
我正在制作一个应用程序,它将为我提供用户插入的数字的平均值、中值和范围。
但我似乎不能将数字相加,然后将它们除以二。
这是我尝试的:
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);
}
我想做的是将数组列表中的所有数字相加,然后将它们除以 2。
尝试使用 Linq:
int[] x;
x.Average();
x.Max();
x.Min();
Number = Convert.ToInt32(list[size].ToString());
您在此处的每次迭代都会覆盖数字的值。
您在此处重新分配数字的值:
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());
}
每次您在循环中设置数组列表元素的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
对对象类型也有重载,而且如果你的数字是 int
类型,那么它Int32
不是Int16
。
以下是我目前用来计算一些简单统计数据的方法:
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;
}
}
请注意,您也许可以改进此特定实现,具体取决于您获得的数据类型(字符串、双精度等)以及它们已经存储的方式(它们是否已经作为允许您操作的列表等?
public static String Find_Mean()
{
List<int> integerList = list.Select(q => int.Parse(q)).ToList();
var result = integerList.Sum() / 2;
return result.ToString();
}