使用特定的数组数

时间:2019-03-07 19:34:03

标签: c#

我的数组最大大小为20。如果我要输入小于20的数据,我该如何在程序仅计算使用的数组的地方获取它?

for (int i = 0; i < Score.Length; i++)
{
    sum = sum + Score[i];

}
average = sum / Score.Length;

如果我在上面的循环中使用它,则它总是除以20作为平均值。我只需要计算输入的值,而不是20。我更喜欢使用数组的解决方案

3 个答案:

答案 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;)