我建立了一个小程序来计算15个或更少的平均数.有15个文本框,每个文本框的默认值为“0”.程序知道获取所有类型数字的总和,并将其除以不返回“0”的文本框的数量.但是如果用户错误地删除了其中一个文本框中的’0’之一..运行时错误.
最初我通过写这个“if语句”15次(每个文本框一个)来解决这个问题:
if (t1.Text == "") { tr1 = 0; } else { tr1 = Double.Parse(t1.Text); }
此代码检查文本框中是否有东西(例如,名为t1),如果为true,则程序给出双’tr1′(不要与’t1’混淆),值为’0’如果为false,则代码将’t1’的文本赋予’t1′.
我不得不写’如果’15次.我想知道我是否可以用数组和for循环编写相同的代码,以及如何?
private void goyouidiot_Click(object sender,EventArgs e) { double tr1; double tr2; double tr3; double tr4; double tr5; double tr6; double tr7; double tr8; double tr9; double tr10; double tr11; double tr12; double tr13; double tr14; double tr15; if (t1.Text == "") { tr1 = 0; } else { tr1 = Double.Parse(t1.Text); } if (t2.Text == "") { tr2 = 0; } else { tr2 = Double.Parse(t2.Text); } if (t3.Text == "") { tr3 = 0; } else { tr3 = Double.Parse(t3.Text); } if (t4.Text == "") { tr4 = 0; } else { tr4 = Double.Parse(t4.Text); } if (t5.Text == "") { tr5 = 0; } else { tr5 = Double.Parse(t5.Text); } if (t6.Text == "") { tr6 = 0; } else { tr6 = Double.Parse(t6.Text); } if (t7.Text == "") { tr7 = 0; } else { tr7 = Double.Parse(t7.Text); } if (t8.Text == "") { tr8 = 0; } else { tr8 = Double.Parse(t8.Text); } if (t9.Text == "") { tr9 = 0; } else { tr9 = Double.Parse(t9.Text); } if (t10.Text == "") { tr10 = 0; } else { tr10 = Double.Parse(t10.Text); } if (t11.Text == "") { tr11 = 0; } else { tr11 = Double.Parse(t11.Text); } if (t12.Text == "") { tr12 = 0; } else { tr12 = Double.Parse(t12.Text); } if (t13.Text == "") { tr13 = 0; } else { tr13 = Double.Parse(t13.Text); } if (t14.Text == "") { tr14 = 0; } else { tr14 = Double.Parse(t14.Text); } if (t15.Text == "") { tr15 = 0; } else { tr15 = Double.Parse(t15.Text); } double[] sch = { tr1,tr2,tr3,tr4,tr5,tr6,tr7,tr8,tr9,tr10,tr11,tr12,tr13,tr14,tr15 }; double total = 0; double sorf = 0; for (int i = 0; i != 14; i++) { sorf = sorf + sch[i]; if (sch[i] > 0) { total++; } } double totalic = sorf / total; string glass = totalic.ToString(); result.Text = ("your score: " + glass); }
解决方法
Double.TryParse(t1.Text.Trim(),out tr1);
将tr1设置为文本框的数值,如果由于某种原因无法将其转换为0.0.如果转换成功,它也将返回true,如果失败则返回false,但如果默认值为0.0,则不关心返回值.
额外奖励:如果有人决定将“这不是数字”,则不会抛出异常.进入文本框.它只会看到值为0.
要在数组中执行此操作…
TextBox t[] = { t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15 }; double tr[] = new double[t.Length]; for (int i = 0; i < t.Length; ++i) { Double.TryParse(t[i].Text.Trim(),out tr[i]); }
更新:
注意,期望能够计算包含0的数字的平均值是完全合理的.为此:
TextBox t[] = { t1,t15 }; double tr[] = new double[t.Length]; int valid_count = 0; for (int i = 0; i < t.Length; ++i) { if (Double.TryParse(t[i].Text.Trim(),out tr[i])) ++valid_count; }
将TextBoxes的默认值设置为空白(“”),然后您将知道用户输入的合法数量为0,以及有多少空白.将总和除以valid_count以获得准确的平均值. (但请确保valid_count> 0,否则您可能会获得除零异常.)