摄氏温度到华氏温度转换表

时间:2014-11-27 17:38:48

标签: c#

我正在尝试创建一个将Celsius转换为Fahrenheit的表单,反之亦然,但我遇到了转换按钮代码的错误。我得到的问题是变量convertedTemperature保留为空,因此如果验证失败,则消息将通过输出标签(lblConvertedTemperature)显示。但由于这是空白我得到了使用未分配的变量错误。我的问题是如何重写处理部分以避免此错误。

        Double inputTemperature;// the variable that will store txtTemperatureInput for calculation
        Double convertedTemperature;// the variable that will store the converted temperature



        /*********************************
         * INPUT                         *
         * *******************************/
        // when the user inputs a value and clicks calculate, the input must first be validated
        if (Double.TryParse(txtTemperatureInput.Text, out inputTemperature) == false)
        {
            lblConvertedTemperature.Text = "Temperature must be a numeric value.";// message displayed in 
            //output label telling user their input was not accepted because it was not numeric
            txtTemperatureInput.Focus();// sets the focus back onto the temperature textbox for a new entry
        }
        else
        {
            /*******************************
             * PROCESSING                  *
             *******************************/
            if (optConvertToCelsius.Checked == true)// if the convert to celsius radio button is selected
            // this statement will run
            {
                convertedTemperature = (inputTemperature - 32)*5 / 9;// the formula for converting 
                //Fahrenheit to Celsius

            }
            else if (optConvertToFahrenheit.Checked == true)// convert to fahrenheit was selected, 
            //meaning the convert to fahrenheit radio button was selected, so this statement will run
            {
                convertedTemperature = (inputTemperature * 9) / 5 + 32; ;// the formula for converting Celsius to
                //Fahrenheit
            }//end concatonated if
        }//end if
            /******************************
             *OUTPUT                      *
             ******************************/
            lblConvertedTemperature.Text = Math.Round(convertedTemperature, 4).ToString();// sets the converted temperature
            // label to the value of convertedTemperature

        }
    }
}

2 个答案:

答案 0 :(得分:4)

  

我的问题是如何重写处理部分以避免此错误。

嗯,编译器关注的有两种情况:

  • 如果输入无效,您仍然在改变lblConvertedTemperature.Text ......所以只有在您完成后才能返回。 (然后你不需要一个else条款,这意味着你将有更少的嵌套 - 总是很好的可读性。)
  • 未检查optConvertToCelsiusoptConvertToFahrenheit。这是编译器认为的情况,因为您有两个独立的条件,您需要检查。当然,你可能知道它永远不会发生。

对于后者,我建议删除第二个条件:

if (optConvertToCelsius.Checked)
{
    ...
}
else
{
    ...
}

请注意,我已经从第一个条件中移除了== true,这只是一种风格问题。

现在编译器会知道如果你到达这一点,那么将执行这两个块中的一个。由于两个块都分配给convertedTemperature,因此该变量将在该代码的末尾明确赋值。

编辑:只是澄清一下,如果你有:

if (someCondition)
{
    ...
} 
else if (someOtherCondition)
{
    ...
}

编译器将假设将执行其中一个块,无论条件是什么。即使知道确切的一个条件是真的,编译器也会遵循其相对简单的规则。

答案 1 :(得分:0)

你正在寻找范围。简单地移动

         /******************************
         *OUTPUT                      *
         ******************************/
        lblConvertedTemperature.Text = Math.Round(convertedTemperature, 4).ToString();// sets the converted temperature
        // label to the value of convertedTemperature

到“处理”范围。