Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用特定数组计数_C# - Fatal编程技术网

C# 使用特定数组计数

C# 使用特定数组计数,c#,C#,我的阵列最大大小是20。如果我输入的数据少于20个,在我的程序只计算使用过的数组的情况下,我如何获得它 for (int i = 0; i < Score.Length; i++) { sum = sum + Score[i]; } average = sum / Score.Length; for(int i=0;i

我的阵列最大大小是20。如果我输入的数据少于20个,在我的程序只计算使用过的数组的情况下,我如何获得它

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

}
average = sum / Score.Length;
for(int i=0;i

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

您需要跟踪
!=0
,所以

int count = 0;
for(int i = 0; i < array.Length; i++)
{
    if ( array[i] != 0 ) 
    { 
        count++;
        sum += array[i];
    }
}
average = sum / count;
int count=0;
for(int i=0;i

小心被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;

当然,由于您没有说明数据的类型,您可以使用其他数据类型,如双精度、浮点型、长型和十进制两种解决方案。

这可能有些过分,但另一种方法是使用Math.Numerics软件包的
SparseVector
类:

稀疏向量使用两个通常比向量短得多的数组。一个数组存储所有非零的值,另一个数组存储它们的索引

PM>安装软件包MathNet.Numerics


Sum()
将只遍历非空元素。

听起来您想使用
列表而不是数组-这样您就不需要预先指定大小。您需要跟踪在单独的变量中添加了多少项。如果您想为您完成此操作,请使用a。在这种情况下,使用
List
ratherOP不会说有效项为正。他想知道数组的使用范围,所以他需要一个变量来保持数组填充时的计数,而不是求和时的计数。@Magnetron什么值包含一个空整数数组?不管怎样,编辑以计数所用元素的出现次数,而不只是正数。尽管整数的默认值为零,您无法判断零值是因为用户未定义数组项,还是用户将其值设置为零。因此,如果数组是[1,2,0,3,4,…]或[1,2,-1,3,4,…],则代码将失败。您可以使用一个可为空整数的数组(
int?[]
),但与
列表相比,这似乎增加了许多不必要的复杂性
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;
var vector = SparseVector.Build.SparseOfArray(Score);
var sum = vector.Sum();