所以基本上我正在尝试制作一个Windows Form Application来计算4个测试等级的平均值。但是,在某些课程中,我可能只有3个测试。如果没有所有四个测试文本框中的值,程序将无法计算平均值。我试图想出一种代码的方法,如果第四个文本框中没有任何内容,只需忽略它并计算其他3.我的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace GradeCalc
{
public partial class Grades : Form
{
public Grades()
{
InitializeComponent();
}
private void Submit_Click(object sender, EventArgs e)
{
double test1;
double test2;
double test3;
double test4;
double average4;
double average3;
//Here, I'm trying to achieve:
//if (t4 is empty)
//{find the average of the first 3 textboxes}
if (t4.Text == null)
{
test1 = double.Parse(t1.Text);
test2 = double.Parse(t2.Text);
test3 = double.Parse(t3.Text);
average3 = ((test1 + test2 + test3) / 3);
tavg.Text = average3.ToString("00.00");
}
//Here, I'm trying to achieve:
//if (t4 is not empty)
//{ calculate the average of all 4 textboxes}
else
if (t4.Text != null)
{
test1 = double.Parse(t1.Text);
test2 = double.Parse(t2.Text);
test3 = double.Parse(t3.Text);
test4 = double.Parse(t4.Text);
average4 = ((test1 + test2 + test3 + test4) / 4);
tavg.Text = average4.ToString("00.00");
}
}
}
}
我对C#没有太多经验,所以感谢任何帮助。
答案 0 :(得分:3)
尝试String.IsNullOrEmpty(t4.Text)
答案 1 :(得分:2)
试试这个:
List<double> MyValues = new List<double>;
double T;
if ( double.TryParse ( t1.Text, out T) )
MyValues.Add (T);
if ( double.TryParse ( t2.Text, out T) )
MyValues.Add (T);
if ( double.TryParse ( t3.Text, out T) )
MyValues.Add (T);
if ( double.TryParse ( t4.Text, out T) )
MyValues.Add (T);
if ( MyValues.Count > 0 )
tavg.Text = MyValues.Average ().ToString ("00.00");
上面的代码是健壮的......如果任何文本(t1-t4)不是有效数字,则跳过它......计算正确值的平均值(无论是1,2,3还是4)只...并且它处理了没有输入有效值的情况......
您可以轻松修改它,要求输入至少3个有效数字,例如将最后if
更改为if ( MyValues.Count > 3 )
。
答案 2 :(得分:0)
第四个文本框的内容可能不是null,而只是一个空字符串。您可以使用String.IsNullOrEmpty()而不是与null的比较来覆盖所有角度。但是,如果有人放入某个空间或其他什么东西呢。你可能也希望删除空格。
完全替代方法是使用TryParse方法而不是Parse - 然后使用返回的成功布尔值来确定您有多少结果。 TryParse的工作原理如下:
if (Double.TryParse(t4.Text, out test4))
{
// this works
}
else
{
// this did not
}
答案 3 :(得分:0)
您可以通过分离要执行的各种任务来改进代码。最初,您要解析文本框中的数字。你可以使用一个函数来做到这一点:
IEnumerable<Double> ParseValues(IEnumerable<TextBox> textBoxes) {
foreach (var textBox in textBoxes) {
Double value;
if (Double.TryParse(textBox.Text, out value))
yield return value;
}
}
此函数将采用TextBox
个对象的输入序列,并生成Double
值的输出序列,跳过包含无效值的所有文本框。
然后您可以使用此功能计算平均值:
var values = ParseValues(new[] { t1, t2, t3, t4 });
if (values.Any()) {
var average = values.Average();
tavg.Text = average.ToString("00.00");
}
如果任何或所有文本框都包含有效值,此代码将计算平均值。
答案 4 :(得分:0)
查看讨论TryParse
的其他答案或文本框的内容。这只是对这些内容的注释。
FWIW,我有帮助功能,让生活更轻松,例如:
double? AsDouble (string str) {
double value;
if (double.TryParse(str, out value))
return value;
} else {
return null;
}
}
然后它就像:
一样简单double val = AsDouble(txt.Text) ?? 0;
(其中0是默认的数字。)
快乐的编码。