为什么我在 if 语句中定义双精度时遇到问题



我的代码如下所示:

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。它的范围仅限于{}之间的空间。

最新更新