2012-06-06 37 views
5

我如何初始化Java中的整數數組,如下所示:int[] array = {1,2,3};在switch語句中?Java:如何在開關情況下初始化int數組?

目前,我可以這樣寫:

switch(something) { 
    case 0: int[] array = {1,2,3}; break; 
    default: int[] array = {3,2,1}; 
} 

但是,當我嘗試訪問array變量,日食會抱怨它可能不會被初始化。

如果我試圖聲明它像int[] array;int[] array = new int[3];,然後有switch語句,它會說我正試圖重新聲明它。

我該如何解決這個問題?最後的想法是能夠基於一些邏輯(switch語句)在一行代碼中用10個值初始化一個數組。

+0

另請參閱:http://stackoverflow.com/questions/4104134/why-are-variables-not-local-in-case-statements –

回答

14

將聲明放在switch語句之前。您還需要顯式實例化正確類型的數組。

int[] array; 
switch (something) { 
    case 0: array = new int[] {1, 2, 3}; break; 
    default: array = new int[] {3, 2, 1}; 
} 
+0

謝謝!對不起,如果它似乎是一個愚蠢的問題:) –

1

我會告訴你把數組聲明放在開關塊外面,但是你不能在聲明後使用= { 1, 2, 3}語法。您需要以常規方式初始化它,如array = new int[] {1, 2, 3};

1
int[] array; 
switch (something) { 
    case 0: array = new int[]{1, 2, 3}; break; 
    default: array = new int[]{3, 2, 1}; 
} 
+0

是的,謝謝,但馬克·拜爾斯是第一個:) –

+0

擊敗不到一分鐘!呃,好吧。很高興你找到了解決方案! – GWilliams00

0

我收到了同樣的問題。希望這可以幫助你。

First Mark Byers絕對是對的。 Java的工作範圍儘可能小。所以如果你試圖做

case 1: int arr = whatever and case 2 : int arr = ...它會給你一個重申聲明的錯誤,因爲整個開關被視爲一個範圍,並且沒有區分/基於範圍。

點2:如果你說:

case 1: int arr = whatever and case 2 : arr = ...假設INT ARR將基於以下原則進行編譯和從案例1,然後考慮你還是錯了,並再次Java將讓你的錯誤,那each and every local var has to be declared and initialized before its use.

所以最好的方法是在開關外部聲明它並根據您的喜好定義或初始化它。