Java 错误:变量可能尚未初始化
接收错误: Pay.java:81:error:变量Java 错误:变量可能尚未初始化,java,Java,接收错误: Pay.java:81:error:变量hourlyWage可能没有 初始化的JOptionPane.showMessageDialog(null,hourlyWage) 对于以下代码。声明doublehourlyWage,这些语句位于主参数内。看不到我错过了什么,是吗 if(skillInt == 1){ hourlyWage = 17.00; } else if(skillInt == 2){ hourlyWage = 20.00; } else if(skill
hourlyWage
可能没有
初始化的JOptionPane.showMessageDialog(null,hourlyWage)代码>
对于以下代码。声明doublehourlyWage
,这些语句位于主参数内。看不到我错过了什么,是吗
if(skillInt == 1){
hourlyWage = 17.00;
} else if(skillInt == 2){
hourlyWage = 20.00;
} else if(skillInt == 3){
hourlyWage = 22.00;
}
JOptionPane.showMessageDialog(null, hourlyWage);
您需要启动hourlyWage
:
double hourlyWage = 0; // or some other value
if(skillInt == 1) {
// ...
您需要启动hourlyWage
:
double hourlyWage = 0; // or some other value
if(skillInt == 1) {
// ...
hourlyWage
在if
语句中获取其值。所以这条线有可能被跳过
在if
之前添加默认初始化,如下所示:
double hourlyWage = 0.0;
只有在读取变量之前,在所有执行分支中将值写入变量时,才可能只声明不带值的变量。因此,在else
分支中添加一个值也可以解决您的问题。仅在else if
分支中添加值类似于仅使用if分支。hourlyWage
在if
语句中获取其值。所以这条线有可能被跳过
在if
之前添加默认初始化,如下所示:
double hourlyWage = 0.0;
只有在读取变量之前,在所有执行分支中将值写入变量时,才可能只声明不带值的变量。因此,在else
分支中添加一个值也可以解决您的问题。仅在else if
分支中添加值类似于仅使用if分支。消息指出,可能(如果skillInt
不在{1,2,3}
中)使用未初始化的变量(hourlyWage)。首先用一些值初始化它:
hourlyWage = 0;
if (skillInt == 1)
//...
或添加else
块:
//...
else if (skillInt == 3)
hourlyWage = 22.0;
else
hourlyWage = 0;
如果skillInt
的唯一可能值是{1,2,3},那么您可能希望仅使用else
移动第三个If
块:
//...
else {
hourlyWage = 22.0;
}
顺便说一下,更漂亮的方法是开关
操作员:
switch (skillInt) {
case 1 : hourlyWage = 17.0;
break;
case 2 : hourlyWage = 20.0;
break;
case 3 : hourlyWage = 12.0;
break;
default : hourlyWage = Double.POSITIVE_INFINITY;
}
消息指出,可能(如果skillInt
不在{1,2,3}
中)您使用了未初始化的变量(hourlyWage)。首先用一些值初始化它:
hourlyWage = 0;
if (skillInt == 1)
//...
或添加else
块:
//...
else if (skillInt == 3)
hourlyWage = 22.0;
else
hourlyWage = 0;
如果skillInt
的唯一可能值是{1,2,3},那么您可能希望仅使用else
移动第三个If
块:
//...
else {
hourlyWage = 22.0;
}
顺便说一下,更漂亮的方法是开关
操作员:
switch (skillInt) {
case 1 : hourlyWage = 17.0;
break;
case 2 : hourlyWage = 20.0;
break;
case 3 : hourlyWage = 12.0;
break;
default : hourlyWage = Double.POSITIVE_INFINITY;
}
编译器表示它相信存在一个可能的代码路径,这意味着变量在未初始化的情况下使用
首选的修复方法是在创建时将其初始化为默认值,但如果失败,请确保if/else链在设置默认值的无条件else块中结束。编译器表示它认为存在一个可能的代码路径,这意味着在未初始化的情况下使用变量
首选的修复方法是在创建时将其初始化为默认值,但如果失败,请确保if/else链在设置默认值的无条件else块中结束。在代码中,如果skillInt不等于1、2或3,则根本不分配hourlyWage。如果hourlyWage有一个合适的默认值,它适用于除1、2或3之外的所有可能的skillInt值,那么您可以通过在If/else(double hourlyWage=XX.XX;
)之上进行设置,或者在无条件的else分支中进行设置:}else{hourlyWage=XX.XX;}
。(将默认值替换为XXs。)
我写这篇文章是因为其他四个答案忽略了一些重要的东西
如果(似乎更有可能)当skillInt的值不被理解时,hourlyWage没有可以正确使用的默认值,那么盲目地将hourlyWage设置为0或其他一些无效值,并可能继续进行进一步处理无法产生正确的结果,只会加剧已经存在的错误。如果该方法无法使用skillInt的当前值,唯一正确的做法是中止处理,例如:
还要注意的是,浮点数据类型不精确且不可靠。在实际应用程序中,必须使用货币值的类型。在代码中,如果skillInt不等于1、2或3,则根本不指定hourlyWage。如果hourlyWage有一个合适的默认值,它适用于除1、2或3之外的所有可能的skillInt值,那么您可以通过在If/else(double hourlyWage=XX.XX;
)之上进行设置,或者在无条件的else分支中进行设置:}else{hourlyWage=XX.XX;}
。(将默认值替换为XXs。)
我写这篇文章是因为其他四个答案忽略了一些重要的东西
如果(似乎更有可能)当skillInt的值不被理解时,hourlyWage没有可以正确使用的默认值,那么盲目地将hourlyWage设置为0或其他一些无效值,并可能继续进行进一步处理无法产生正确的结果,只会加剧已经存在的错误。如果该方法无法使用skillInt的当前值,唯一正确的做法是中止处理,例如:
还要注意的是,浮点数据类型不精确且不可靠。在实际应用程序中,必须将类型用于货币值。信息不足。制作一个只包含相关部分(而不是整个基线)的最小工作示例。可能重复abracadabra,它可以工作。感谢您的帮助,它可能不会进入您的IF-ELSE梯形图中。从中发送的skillInt
值信息不足。制作一个仅包括相关零件(而非您的en)的最低工作示例