这是我编写的用于解决二次方程式的程序。我有三个文本框,用于输入a,b和c的值。如果我使用以下代码,而没有在if语句之前将任何值分配给a,b或c,则在double Delta = Math.Pow(b, 2) - 4 * a * c;
行中会出现错误“使用未分配的变量”,仅关于变量b和c(不是a )。
private void bt_Calculate_MouseClick(object sender, MouseEventArgs e)
{
Double a, b, c;
if (txt_b.Text != "" && txt_b.Text != "" && txt_c.Text != ""
&& (Double.TryParse(txt_a.Text, out a) && Double.TryParse(txt_b.Text, out b) && Double.TryParse(txt_c.Text, out c)) == true)
{
double Delta = Math.Pow(b, 2) - 4 * a * c;
if (Delta > 0)
{
Double x1 = Math.Round((-b + Math.Sqrt(Delta)) / (2 * a), 4);
Double x2 = Math.Round((-b - Math.Sqrt(Delta)) / (2 * a), 4);
txt_Result1.Text = Convert.ToString(x1);
txt_Result2.Text = Convert.ToString(x2);
}
else if (Delta == 0)
{
Double x1 = Math.Round(-b / (2 * a), 4);
txt_Result1.Text = Convert.ToString(x1);
}
else
{
MessageBox.Show("Impossible Equation.");
}
}
else if ((txt_a.Text == "") || (txt_b.Text == "") || (txt_c.Text == ""))
{
MessageBox.Show("Provide a value for a, b and c.");
}
else
{
MessageBox.Show("Provide a valid number, please");
}
}
但是,当我在if语句之前为所有三个变量赋值0时,程序不会给出任何错误并输出正确的结果。
因此:Double a=0, b=0, c=0;
我想知道为什么会这样。如果TryParse
返回的值为true,是否不应该将值存储在给定的变量中?如果在第一个if块的开头将文本框的内容分配给它们各自的变量,我的程序也可以工作。例如:txt_a.Text = a
。
答案 0 :(得分:2)
编译器不够聪明。
完全可以这样:
double a, b;
if (double.TryParse("5", out a) && double.TryParse("6", out b))
// works fine
Console.WriteLine("a = {0}, b = {1}", a, b);
但是,如果我们使条件语句复杂一点,那么突然编译器将不再确定您是否已初始化变量:
double a, b;
if (true == (double.TryParse("5", out a) && double.TryParse("6", out b)))
// generates an error
Console.WriteLine("a = {0}, b = {1}", a, b);
将这些变量初始化为0是完全可以的。