2012-06-06 24 views
5

Javaで整数配列を初期化するにはどうすればいいですか?switch文の中にint[] array = {1,2,3};Java:スイッチのケースでint配列を初期化するには?

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

をしかし、私はarray変数にアクセスしようとすると、Eclipseはそれが初期化されない可能性があること文句を言うだろう:

現在、私は書くことができます。

int[] array;またはint[] array = new int[3];のように宣言してからswitch文を実行しようとすると、再宣言しようとしています。

この問題を解決するにはどうすればよいですか?最終的なアイデアは、何らかのロジック(switchステートメント)に基づいて、1行のコードで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

はい、ありがとうございますが、Mark Byersが最初にありました。 –

+0

1分足らずです!まぁ。あなたが解決策を見つけてうれしい! – GWilliams00

0

私は前に同じ質問がありました。これがあなたを助けることを願っています

最初のマーク・バイヤーズは絶対に正しいです。 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.

これはスイッチの外側に宣言し、好きな場合に定義したり初期化するのが最も良い方法です。