我一直收到错误变量F3可能尚未在您看到的最后一行代码中初始化。
我做错了什么?
{
Float F1,F2, F3;
F1 = Float.parseFloat(
JOptionPane.showInputDialog("Enter a number and press ok."));
F2 = Float.parseFloat(
JOptionPane.showInputDialog("Enter a second number and press ok."));
if(F1 >= F2)
{
F3=(F1 * F2) + (F1 * 2);
}
if(F2 >= F1)
{
F3 =(F1 + F2) + (F2 * 5);
}
DecimalFormat dec = new DecimalFormat("##.##");
JOptionPane.showMessageDialog(null,"Your calculations are:" +(F3),"Caculations", JOptionPane.INFORMATION_MESSAGE);
答案 0 :(得分:8)
您应该使用if / else而不是if / if here,以便编译器知道F3
将始终设置为值。
以下代码等同于您的if / if语句:
if(F1 > F2) //The = here will always be overridden by the other if clause in your original statement so it's redundant.
{
F3=(F1 * F2) + (F1 * 2);
}
else
{
F3 =(F1 + F2) + (F2 * 5);
}
答案 1 :(得分:2)
根据JLS:
每个局部变量和每个空白的最终字段必须有一个明确的 在对其值进行任何访问时分配值。
此外还有§14.4.2:
如果声明者没有初始化表达式,那么每个 对变量的引用必须先执行 分配给变量,或发生编译时错误。
使用那里的代码,可能在使用之前没有任何内容被分配给F3
(在代码片段的最后一行)。
使用F3 = null
。
答案 2 :(得分:1)
您的代码相当于:
if(F1 > F2) {
F3 = (F1 * F2) + (F1 * 2);
} else {
F3 = (F1 + F2) + (F2 * 5);
}
这应该会使错误消失。
答案 3 :(得分:0)
声明变量时,F3为其赋值null。由于您的if条件,可能存在不为此变量赋值的情况
答案 4 :(得分:0)
试试这个
Float F1=0,F2=0, F3=0;
答案 5 :(得分:0)
最好的方法是使用if-else语句,不要为变量赋值null。 If-else语句对于人类和编译器更好。分配null是没有意义的,并且使编译器无法检查未初始化的问题以供将来修改,如果不检查它,则可能会得到NullPointerException。