使用if语句中的变量更新标签时出现问题(Java)

时间:2013-06-02 16:14:19

标签: java swing jbutton jlabel settext

首先,我是Java和编程的新手(除了Matlab),非常感谢这些简单的答案: - )。

我正在尝试创建一个温度转换器(带GUI),我需要更新一些标签。这在开始时运行良好,但现在我必须使用if语句中的值。这会导致错误,我尝试更新标签:

  

tempKelvin无法解析为变量

单击“转换”按钮时会发生所有操作,此处的代码位于:

// Create and add convert button
    JButton fahrenheitButton = new JButton("Convert");
    fahrenheitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // Check if input is of type double and perform action
            if (isNumber(tempTextField.getText())) {
                double  inputTemp = Double.parseDouble(tempTextField.getText());

                // Convert from Kelvin
                if (((String) unitDropdown.getSelectedItem()).equals("Kelvin")) {
                    int tempKelvin     = (int) (inputTemp);
                    int tempCelcius    = (int) (inputTemp - 273.15);
                    int tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // Convert from Celsius
                } else if (((String) unitDropdown.getSelectedItem()).equals("Celsius")) {
                    int tempKelvin     = (int) (inputTemp + 273.15);
                    int tempCelcius    = (int) (inputTemp);
                    int tempFahrenheit = (int) (inputTemp  * (9/5)  + 32);

                // Convert from Fahrenheit
                } else if (((String) unitDropdown.getSelectedItem()).equals("Fahrenheit")) {
                    int tempKelvin     = (int) ((inputTemp - 32) * (5/9) + 273.15);
                    int tempCelcius    = (int) ((inputTemp - 32) * (5/9));
                    int tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // If none of the above was selected, it's an error...
                } else {
                    int tempKelvin = 0;
                    int tempCelcius = 0;
                    int tempFahrenheit = 0;
                    warningLabel.setText("Oops, this doesn't look good!");
                }

                // Update labels
                kelvinLabel.setText(tempKelvin + " K");
                celsiusLabel.setText(tempCelcius + " C");
                fahrenheitLabel.setText(tempFahrenheit + " F");
                warningLabel.setText("");


            } else {
                warningLabel.setText("Input must be numeric!");
            }
        }
    });

    fahrenheitButton.setBounds(20, 45, 89, 23);
    contentPane.add(fahrenheitButton);

非常感谢任何帮助,谢谢!!

5 个答案:

答案 0 :(得分:0)

您的问题是在每个if [else]语句中创建一个新的临时变量。这就是为什么变量在这些陈述之外不存在的原因。

答案 1 :(得分:0)

您正在引用其范围之外的“临时”变量。 它们在if / else条件语句的每个语句中声明,但在条件语句关闭后引用(在注释“update labels”下)。

一种解决方案是在条件语句之前声明变量,并仅在条件中分配它们。

答案 2 :(得分:0)

你的神奇词是:范围。 因为你的变量是在你的if语句中定义的,所以它实际上在该语句之后“消失”(如果你愿意的话,“范围”) - 结束。

只需将您的变量提取到您想要引用它的最外层范围。祝您好运!

答案 3 :(得分:0)

你最好这样做:

int tempKelvin     = 0;
int tempCelcius    = 0;
int tempFahrenheit = 0;

if(condition1){
    ///
}else if(condition2){
    //
}else if(condition3){
    //
}else{
    //
}

里面如果,你不需要重新声明int函数,只需要tempKelvin = ....;

答案 4 :(得分:0)

你需要在if语句之外定义int tempKelvin并重复使用,如下所述:

// Create and add convert button
    JButton fahrenheitButton = new JButton("Convert");
    fahrenheitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            // Check if input is of type double and perform action
            if (isNumber(tempTextField.getText())) {
                double  inputTemp = Double.parseDouble(tempTextField.getText());

                int tempKelvin = -1;
                int tempCelcius = -1;
                int tempFahrenheit = -1;
                // Convert from Kelvin
                if (((String) unitDropdown.getSelectedItem()).equals("Kelvin")) {
                    tempKelvin    = (int) (inputTemp);
                    tempCelcius    = (int) (inputTemp - 273.15);
                    tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // Convert from Celsius
                } else if (((String) unitDropdown.getSelectedItem()).equals("Celsius")) {
                    tempKelvin     = (int) (inputTemp + 273.15);
                    tempCelcius    = (int) (inputTemp);
                    tempFahrenheit = (int) (inputTemp  * (9/5)  + 32);

                // Convert from Fahrenheit
                } else if (((String) unitDropdown.getSelectedItem()).equals("Fahrenheit")) {
                    tempKelvin     = (int) ((inputTemp - 32) * (5/9) + 273.15);
                    tempCelcius    = (int) ((inputTemp - 32) * (5/9));
                    tempFahrenheit = (int) ((inputTemp - 273.15) * (9/5)  + 32);

                // If none of the above was selected, it's an error...
                } else {
                    tempKelvin = 0;
                    tempCelcius = 0;
                    tempFahrenheit = 0;
                    warningLabel.setText("Oops, this doesn't look good!");
                }

                // Update labels
                kelvinLabel.setText(tempKelvin + " K");
                celsiusLabel.setText(tempCelcius + " C");
                fahrenheitLabel.setText(tempFahrenheit + " F");
                warningLabel.setText("");


            } else {
                warningLabel.setText("Input must be numeric!");
            }
        }
    });

    fahrenheitButton.setBounds(20, 45, 89, 23);
    contentPane.add(fahrenheitButton);