我从文本框中得到一些数字,我想计算这些数字的平均值:
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());
现在我的问题是,我想获得非零数字的平均值,我该怎么做?
另一个问题:
我想改变非{0}数字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;
答案 0 :(得分: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();