我的代码如下所示:
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;
我做错了什么?
这是因为scoping
.变量存在于声明它们的块中(还有其他规则,所以你想进一步阅读)。由于第一个subTotal
是在if
块中声明的(由{}
分隔),因此您只能在该块内使用它。要解决此问题,您可以尝试在这些if
语句之前声明subtotal
:
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;
}
您需要在 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;
}
声明变量subtotal
并将其设置为 if/else 语句开始之前的初始值。
double subtotal;
if (gasQuality==87) {
subtotal = unleaded * gallonsSold;
} else if (gasQuality==89) {
subtotal = unleadedPlus * gallonsSold;
} else if (gasQuality==91) {
subtotal = premium * gallonsSold;
}
您有一个变量范围问题。 将代码重构为上述代码将允许您稍后在方法中使用subtotal
。
您需要在这些块之外定义subtotal
。它的范围仅限于{
和}
之间的空间。