2014-03-13 18 views
5

我正在使用Eclipse獲取此錯誤。switch語句中的重複本地變量

重複的局部變量斗篷

我真的不明白,爲什麼我得到這樣的錯誤。這是我的代碼:

switch (frame) { // frame is an integer 
case 0: 
    Sprite cape = modules.get(Module.CAPE); 
    //cape.setRegion(region); 
    cape.translateY(+1); 
    break; 
case 1: 
    Sprite cape = modules.get(Module.CAPE); 
    //cape.setRegion(region); 
    cape.translateY(-1); 
    break; 
default: 
    throw new IllegalArgumentException(
      "Undefined frame number: " + frame); 
} 

爲什麼不是真的,海角變量是本地的每個案件,而不是switch語句?

+0

很好的答案,但爲了嚴格回答你的問題,考慮如果你在0的情況下刪除了「break」,代碼的行爲如何。 – Grambot

回答

7

爲什麼不是每個case都是局部變量,而是 而不是switch語句?

由於JLS says so

局部變量聲明的在塊範圍(§14.4)是 其餘在其中出現的聲明,以開始其自己的 初始化該塊的並在 右側包含任何其他聲明者的局部變量聲明語句。

而關於switch

switch語句的主體被稱爲一個開關塊

A case未定義範圍。這是定義新範圍的switch塊。

0

你應該聲明cape變量外switch聲明:

Sprite cape; 
switch (frame) { 
    case 0: 
     cape = modules.get(Module.CAPE); 
     //cape.setRegion(region); 
     cape.translateY(+1); 
     break; 
    case 1: 
     cape = modules.get(Module.CAPE); 
     //cape.setRegion(region); 
     cape.translateY(-1); 
     break; 
    default: 
     throw new IllegalArgumentException(
      "Undefined frame number: " + frame); 
} 
+0

這並不能回答我的問題。 – Someone

+0

@Someone因爲開關裏面的一切都屬於同一範圍 – nikis

+0

@Someone:確實如此,你只是不知道它 – Brian

7

每個案件是同一區塊內,具體而言,{}switch聲明。即使在不同情況下定義相同的變量時,這也是同一個塊。

加入{}小號定義自己的每一個case塊:

case 0: 
    { 
    Sprite cape = modules.get(Module.CAPE); 
    //cape.setRegion(region); 
    cape.translateY(+1); 
    } 
    break; 
case 1: 
    { 
    Sprite cape = modules.get(Module.CAPE); 
    //cape.setRegion(region); 
    cape.translateY(-1); 
    } 
    break; 

或者你可以簡單的switch所以它的範圍在那裏,您使用引用之前聲明cape

Sprite cape; 
switch (frame) { // frame is an integer 
case 0: 
    cape = modules.get(Module.CAPE); 

同樣地,對於殼體1

+0

或者你可以在開關外面定義'雪碧披風',然後在每種情況下設置它。 – Scott

+0

@斯科特是的,我正在接近! – rgettman

+0

我們都太快了我們的手指;) – Scott

5

整個switch語句是像任何其他的代碼塊。但是你可以創建內部代碼塊的代碼塊,所以:

case 0: { 
    // code here 
} 
case 1: { 
    // other code here 
} 

(如果switch是在這方面經過特殊處理的,你可以不能夠做到循)已經提供

+0

+1大括號定義範圍。案例標籤就像一個轉到。 – Brian