所以我的程序中出现了这个错误:
BankChargesWilson.java:55: error: variable checksCost might not have been initialized
System.out.println("Your total cost is " + money.format(checksCost) + ".");
^
1 error
但是我不明白为什么当我创建格式化对象并且我之前初始化了checksCost变量。
继承对象+我的定义。
// Decimal Format Object
DecimalFormat money = new DecimalFormat("$##,###.##");
// Scanner Object for Input
Scanner keyboard = new Scanner (System.in);
// Variables
double baseFee = 10.00; // The base fee the bank requires for the account
double checkFee; // The fee for a check
int checksWritten; // The users inputted amount of checks written for the month
double checksCost; // The cost for the checks based on the amount written in the month
继承我的else-if语句,使用它,输出和导致错误的地点。
if (checksWritten < 20)
{
checksCost = checksWritten * 0.10;
}
else if (checksWritten >= 20 && checksWritten <= 39)
{
checksCost = checksWritten * 0.08;
}
else if (checksWritten >= 40 && checksWritten <= 59)
{
checksCost = checksWritten * 0.06;
}
else if (checksWritten >= 60)
{
checksCost = checksWritten * 0.04;
}
System.out.println("You entered that you wrote " + checksWritten + " checks this month.");
System.out.println("Your total cost is " + money.format(checksCost) + ".");
我不确定为什么它说它不再被初始化了。
问题:仅在if-else-if循环的范围内看到checksCost吗?如果是这样,那么在上面进一步定义的时候怎么样?
答案 0 :(得分:3)
因为编译器没有像你想象的那样深入分析你的代码。
虽然你的if/else
链会根据条件确定执行分支,但是编译器没有意识到这个结果,抱怨你错过了else
条件。
您可以通过初始化变量或让最后else if
为简单else
来解决问题(在这种特定情况下不会改变语义)。
答案 1 :(得分:2)
您需要提供默认初始值,或者您必须提供else
阻止并在那里提供您的价值。
原因是,所有条件都无法执行会发生什么?
当您提供else块时,可以确保始终有机会在if
或else
双重检查成本;
if(){ //false
}
else if(){ //false
}
现在checksCost
值是什么?
答案 2 :(得分:2)
是的,您的checksCost变量只能在初始化的块内看到(在这种情况下,在for循环的部分内)。
在if-else语句的块中可以看到它的原因,即使它已经在上面声明了,因为内部块可以访问自己以外的代码,但反之则不然。
答案 3 :(得分:0)
您需要为checksCost变量设置初始值。可能存在值永远不会被设置的情况。可能存在没有任何条件逻辑被击中的情况。
答案 4 :(得分:0)
Java编译器要求必须初始化变量。在编译时,它不会检查代码的逻辑,因此它认为如果没有“else if”匹配,则变量不会被初始化。 你需要在if / else部分之前初始化checkCost,或者放一个else {double = smth;结束if / else子句。
答案 5 :(得分:0)
如果checksWritten
等于0
checksCost
应该等于什么?将checksCost
初始化为该值。同样,您应该将checksWritten
初始化为0
。也不要忘记else
块,因为它会导致您刚刚发现的脆弱代码。因此,在这种情况下,只需将上一个else if
更改为else
。