2016-06-13 65 views
-1

例如,如果我寫這樣的代碼:爲什麼我不能在開關中使用相同的變量?

double result = 0; 
    switch (operation) { 
     case "divide": 
      double result = (double) first/second; 
      string = Double.toString(result); 
      break; 
     case "multiply": 
      double result = (double) first * second; 
      string = Double.toString(result); 
      break; 
     case "substract": 
      double result = (double) first - second; 
      string = Double.toString(result); 
      break; 
     case "add": 
      double result = (double) first + second; 
      string = Double.toString(result); 
      break; 
    } 

它返回錯誤:可變「結果」在範圍已定義。

我知道如何解決這個問題。我可以在每種情況下創建一個不同的變量,但是這樣會通過必須爲每個變量編寫代碼來延長代碼長度。

如何使這項工作在給定的代碼中書寫?

+0

你可以像'案「鴻溝」括號包裝每個案例:{...}'等等給每個情況下,它自己的範圍 – daco

+0

我只是想這樣做,但它不能解決問題。它仍然報告相同的錯誤。 – Leonz

+0

http://ideone.com/L2wu9I – Selvin

回答

4

這是由result已被定義在switch語句頂部的事實引起的,並且您正在聲明中再次聲明它。

嘗試這樣:

switch (operation) { 
    case "divide": 
     double result = (double) first/second; 
     string = Double.toString(result); 
     break; 
    case "multiply": 
     double result = (double) first * second; 
     string = Double.toString(result); 
     break; 
    case "substract": 
     double result = (double) first - second; 
     string = Double.toString(result); 
     break; 
    case "add": 
     double result = (double) first + second; 
     string = Double.toString(result); 
     break; 
} 

換句話說,你有過什麼,只是從你最初的聲明。


或者,你可以聲明double,並用它在你的每一個案件:

double result = 0; 
switch (operation) { 
    case "divide": 
     result = (double) first/second; 
     string = Double.toString(result); 
     break; 

    ... 

由於亞辛Hajaj在評論中指出,這將是,如果要好得多您在switch語句的末尾使用了string = Double.toString(result);一次,而不是多次重複。

這將是這個樣子:

double result = 0; 
switch (operation) { 
    case "divide": 
     result = (double) first/second; 
     break; 
    case "multiply": 
     result = (double) first * second; 
     break; 
    ... 
} 
string = Double.toString(result); 
+0

哦。我在案件陳述中再次初始化結果。按照您的說法完成,現在可以使用,非常感謝。 – Leonz

+0

@Leonz很高興我能幫到你! :) –

+0

@Leonz請優化代碼。你可以在交換機外寫'string = Double.toString(result)'而不是寫4次。 –

0

實際上,你可以通過使用括號。

switch (operation) { 
     case "divide": { 
      double result = (double) first/second; 
      string = Double.toString(result1); 
      break; 
     } 
     case "multiply": { 
      double result = (double) first * second; 
      string = Double.toString(result2); 
      break; 
     } 
     default: 
      break; 
    } 
0

在java中,{}內定義的任何局部變量都可用,直到最後一行,因此您可以在塊內定義之後重用任何地方。所以在你的情況下沒有用來重新定義結果變量。只需在第一行中定義並隨處使用即可。

double result = 0; 
    switch (operation) { 
     case "divide": 
      result = (double) first/second; 
      string = Double.toString(result1); 
      break; 
     case "multiply": 
      result = (double) first * second; 
      string = Double.toString(result2); 
      break; 
     case "substract": 
      result = (double) first - second; 
      string = Double.toString(result3); 
      break; 
     case "add": 
      result = (double) first + second; 
      string = Double.toString(result4); 
      break; 
    } 
+0

...你可以進一步...並移動'string = Double.toString(result);'在開關外部... – Selvin

0

becaue您已經定義雙重結果變量,以便做到像下面希望它會工作

double result = 0; <----- already define here 
switch (operation) { 
    case "divide": 
     result = (double) first/second; <------ there is no need to 
                define it again 
     string = Double.toString(result1); 
     break; 
    case "multiply": 
     result = (double) first * second; 
     string = Double.toString(result2); 
     break; 
    case "substract": 
     result = (double) first - second; 
     string = Double.toString(result3); 
     break; 
    case "add": 
     result = (double) first + second; 
     string = Double.toString(result4); 
     break; 
} 
0

如果要使用公共變量,那麼你可以這樣做。

double result = 0; 
    switch (operation) { 
     case "divide": 
      result = (double) first/second; 
      string = Double.toString(result); 
      break; 
     case "multiply": 
      result = (double) first * second; 
      string = Double.toString(result); 
      break; 
     case "substract": 
      result = (double) first - second; 
      string = Double.toString(result); 
      break; 
     case "add": 
      result = (double) first + second; 
      string = Double.toString(result); 
      break; 
    } 
2

你不能在你的代碼的一個範圍內聲明相同的變量名,使用全局變量的結果,你也萬一範圍內使用同一個變量。

double result = 0; 
    switch (operation) { 
     case "divide": 
      result = (double) first/second; 
      string = Double.toString(result); 
      break; 
     case "multiply": 
      result = (double) first * second; 
      string = Double.toString(result); 
      break; 
     case "substract": 
      result = (double) first - second; 
      string = Double.toString(result); 
      break; 
     case "add": 
      result = (double) first + second; 
      string = Double.toString(result); 
      break; 
    } 
相關問題