Java:如何在switch案例中初始化int数组?

时间:2012-06-06 21:20:02

标签: java arrays oop initialization int

如何在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语句)在一行代码中初始化一个包含10个值的数组。

4 个答案:

答案 0 :(得分:15)

在switch语句之前放置声明。您还需要显式实例化一个正确类型的数组。

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

答案 1 :(得分:1)

我会告诉你将数组声明放在switch块之外,但是,在声明之后你不能使用= { 1, 2, 3}语法。您需要以常规方式初始化它,如array = new int[] {1, 2, 3};

答案 2 :(得分:1)

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

答案 3 :(得分: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.

的原则再次给你错误

所以最好的方法是在交换机外面声明它,并在您喜欢的任何情况下定义或初始化它。