首先,我是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);
非常感谢任何帮助,谢谢!!
答案 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);