我的数组最大大小为20。如果我要输入小于20的数据,我该如何在程序仅计算使用的数组的地方获取它?
for (int i = 0; i < Score.Length; i++)
{
sum = sum + Score[i];
}
average = sum / Score.Length;
如果我在上面的循环中使用它,则它总是除以20作为平均值。我只需要计算输入的值,而不是20。我更喜欢使用数组的解决方案
答案 0 :(得分:0)
如果您坚持使用数组,则必须跟踪添加到数组中的项目数,例如:
int[] Score = new int[20];
Random rdn = new Random();
int size=0;
for(int i=0;i<rdn.Next(0,20);i++)
{
Score[i] = rdn.Next();
size++;
}
int sum = 0;
for (int i = 0; i < size; i++)
{
sum = sum + Score[i];
}
double average = sum / size;
更好的选择是使用List
类来跟踪您添加的项目数量
List<int> Score = new List<int>();
Random rdn = new Random();
for(int i=0;i<rdn.Next(0,20);i++)
{
Score.Add(rdn.Next());
}
int sum = 0;
for (int i = 0; i < Score.Count; i++)
{
sum = sum + Score[i];
}
double average = sum / Score.Count;
当然,由于您没有说数据类型,因此可以使用其他数据类型,例如两种解决方案都使用double,float,long,decimal。
答案 1 :(得分:0)
这可能是一个矫kill过正,但是另一种方法是使用 Math.Numerics 包中的SparseVector
类:
稀疏向量使用两个通常比向量短得多的数组。一个数组存储所有不为零的值,另一个数组存储其索引。
PM>安装包MathNet.Numerics
var vector = SparseVector.Build.SparseOfArray(Score);
var sum = vector.Sum();
Sum()
将仅通过非空元素。
答案 2 :(得分:-1)
您需要跟踪!= 0
的记录,所以
int count = 0;
for(int i = 0; i < array.Length; i++)
{
if ( array[i] != 0 )
{
count++;
sum += array[i];
}
}
average = sum / count;
当心除以0;)