0

我有一些从文本框中得到的数字,我想计算这些数字的平均值:

float t1 = float.Parse(textBox1.Text);
float t2 = float.Parse(textBox2.Text);
float t3 = float.Parse(textBox3.Text);
float t4 = float.Parse(textBox4.Text);
float t5 = float.Parse(textBox5.Text);
float t6 = float.Parse(textBox6.Text);
float t7 = float.Parse(textBox7.Text);
float[] array = { t1,t2,t3,t4,t5,t6,t7};
float final_Score = array.Average(); 

但我不想在这个计算中Max重视和Min重视参与者:

float final_Score = array.Average()-(array.Max())-(array.Min());

现在我的问题是我想获得非零数字的平均值,我该怎么做?

Max另一个问题:我也想改变Min非零数字的文本框的颜色。

Controls.OfType<TextBox>().Where(x => x.Text == array.Max().ToString()).FirstOrDefault().BackColor = Color.Red;
Controls.OfType<TextBox>().Where(x => x.Text == array.Min().ToString()).FirstOrDefault().BackColor = Color.Red;
4

1 回答 1

4

对于任一解决方案,请使用:

int min = array.Min();
int max = array.Max();

然后是:

float finalScore = array.Except(array.Where(a => a == 0 
                                              || a == min 
                                              || a == max))
                        .Average();

或者:

float finalScore = array.Where(a => a != 0 
                                 && a != min  
                                 && a != max)
                        .Average();

最后,要回答 OP 遇到的问题,如果您需要过滤 0 和 0 以上的最小值,那么您必须这样做(而不是原始int min行):

int min = array.Where(a => a > 0).Min();
于 2013-08-14T04:24:18.077 回答