2014-02-08 55 views
0

我的代碼如下所示:爲什麼我在if語句中定義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; 

我在做什麼錯?

+7

變量的範圍,閱讀它。 –

+0

我剛剛做了,它是有道理的。我是新人,並不擅長編程。那麼需要做些什麼呢? – a12b23c34

+0

在if塊之前初始化外部的小計變量,無論塊內部的初始化是否保留在塊的範圍內,並且不能在塊外部訪問 – bjhaid

回答

2

這是因爲scoping。變量存在於它們聲明的塊中(還有其他規則,所以你想在這裏進一步閱讀)。由於第一個subTotalif塊中聲明(由{}分隔),因此您只能在該塊內使用它。爲了解決這個問題,你可以嘗試那些if語句之前宣佈subtotal

double subtotal = 0; // declaration and initialization 

if (gasQuality==87) { 
    subtotal = unleaded * gallonsSold; // don't declare again 
} 
else if (gasQuality==89) 
    ... 

此外,您還可以使用,而不是那些if-else if語句的switch語句:

switch (gasQuality) { 
    case 87: 
     subtotal = ...; 
     break; 
    case 89: 
     subtotal = ...; 
     break; 
    default: 
     break; 
} 
+0

比'Switch'聲明更進一步改進:爲'gasQuality' Magic-Numbers添加一個'Enum'。 – tilois

+0

我得到這個: Paniagua_Invoice.java:48:subtotal已經在main(java.lang.String [])中定義了 double subtotal = unleadedPlus * gallonsSold; – a12b23c34

+0

**注意**在'if'語句中,您不必再次聲明它。換句話說,不要在if語句中放置'double subtotal ...',只要放置'subtotal = ...',因爲它已經在外部聲明瞭。 – Christian

0

聲明變量subtotal並在if/else語句開始之前將其設置爲初始值。

+0

編譯器表示變量小計已在此處定義。 – a12b23c34

0
double subtotal;   

if (gasQuality==87) { 
    subtotal = unleaded * gallonsSold; 
} else if (gasQuality==89) { 
    subtotal = unleadedPlus * gallonsSold; 
} else if (gasQuality==91) { 
    subtotal = premium * gallonsSold; 
} 

你有一個變量範圍問題。重構你的代碼到上面將允許你在方法的後面使用subtotal

+0

它返回這個 Paniagua_Invoice.java:48:小計已在main(java.lang.String [])中定義 double subtotal = unleadedPlus * gallonsSold; – a12b23c34

+0

仔細看看我所擁有的'if'語句,並將它們與您所擁有的內容進行比較。 – nhgrif

1

您需要定義外的雙小計,如果-else loop.Otherwise變量的範圍在FP-ELSE loop.Try此結束: -

double subtotal; 

if (gasQuality==87) 
    { 
      subtotal = unleaded * gallonsSold; 
    } 
    else if (gasQuality==89) 
    { 
      subtotal = unleadedPlus * gallonsSold; 
    } 
    else if (gasQuality==91) 
    { 
      subtotal = premium * gallonsSold; 
    } 
0

您需要定義subtotal這些塊。它的範圍僅限於{}之間的空間。