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;orint[] array = new int[3];然后使用 switch 语句,它会说我正在尝试重新声明它。

我该如何解决这个问题?最后的想法是能够根据一些逻辑(switch 语句)在一行代码中初始化一个包含 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 回答