为什么我在if语句中定义double时遇到问题?

时间:2014-02-08 21:15:52

标签: java if-statement double

我的代码如下所示:

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;

我做错了什么?

5 个答案:

答案 0 :(得分:2)

这是因为scoping。变量存在于它们声明的块内(还有其他规则,所以你想进一步阅读)。由于第一个subTotalif块中声明(由{}分隔),因此您只能在该块内使用它。要解决此问题,您可以尝试在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 。它的范围仅限于{}之间的空格。