5

次のようにJavaで整数配列を初期化するにはどうすればよいですか:int[] array = {1,2,3};switchステートメント内?

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

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個の値を使用して配列を初期化できるようにすることです。

4

4 に答える 4

15

宣言は、switch ステートメントの前に置きます。また、正しいタイプの配列を明示的にインスタンス化する必要があります。

int[] array;
switch (something) {
    case 0: array = new int[] {1, 2, 3}; break;
    default: array = new int[] {3, 2, 1};
}
于 2012-06-06T21:22:56.123 に答える
1

配列宣言は switch ブロックの外に置くように言いたいのですが= { 1, 2, 3}、宣言の後に構文を使用することはできません。次のように、通常の方法で初期化する必要がありますarray = new int[] {1, 2, 3};

于 2012-06-06T21:21:26.063 に答える
1
int[] array;
switch (something) {
    case 0: array = new int[]{1, 2, 3}; break;
    default: array = new int[]{3, 2, 1};
}
于 2012-06-06T21:23:37.963 に答える
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.

したがって、最良の方法は、スイッチの外側で宣言し、好みに応じて定義または初期化することです。

于 2015-07-30T15:33:36.480 に答える