2012-06-06 33 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.

所以最好的方法是在开关外部声明它并根据您的喜好定义或初始化它。