我的代码如下所示:
if (gasQuality==87){
double subtotal = unleaded * gallonsSold;
}else if (gasQuality==89){
double subtotal = unleadedPlus * gallonsSold;
}else if (gasQuality==91){
double subtotal = premium * gallonsSold;
}
但由于某种原因,编译器以后不会识别“小计”。例如,如果我想对代码中的小计应用税,则编译器会读取:
cannot find symbol
symbol : variable subtotal
location: class Paniagua_Invoice
final double cityTax = .0375 * subtotal;
我做错了什么?
答案 0 :(得分:2)
这是因为scoping
。变量存在于它们声明的块内(还有其他规则,所以你想进一步阅读)。由于第一个subTotal
在if
块中声明(由{}
分隔),因此您只能在该块内使用它。要解决此问题,您可以尝试在subtotal
语句之前声明if
:
double subtotal = 0; // declaration and initialization
if (gasQuality==87) {
subtotal = unleaded * gallonsSold; // don't declare again
}
else if (gasQuality==89)
...
此外,您可以使用switch语句而不是那些if-else if
语句:
switch (gasQuality) {
case 87:
subtotal = ...;
break;
case 89:
subtotal = ...;
break;
default:
break;
}
答案 1 :(得分:1)
你需要在if -else循环之外定义双小计。否则变量的范围以fp-else循环结束。试试这个: -
double subtotal;
if (gasQuality==87)
{
subtotal = unleaded * gallonsSold;
}
else if (gasQuality==89)
{
subtotal = unleadedPlus * gallonsSold;
}
else if (gasQuality==91)
{
subtotal = premium * gallonsSold;
}
答案 2 :(得分:0)
声明变量subtotal
并在if / else语句开始之前将其设置为初始值。
答案 3 :(得分:0)
double subtotal;
if (gasQuality==87) {
subtotal = unleaded * gallonsSold;
} else if (gasQuality==89) {
subtotal = unleadedPlus * gallonsSold;
} else if (gasQuality==91) {
subtotal = premium * gallonsSold;
}
您有可变范围问题。将代码重构为上述代码将允许您稍后在方法中使用subtotal
。
答案 4 :(得分:0)
您需要定义这些块的subtotal
。它的范围仅限于{
和}
之间的空格。