如何在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个值的数组。
答案 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.
所以最好的方法是在交换机外面声明它,并在您喜欢的任何情况下定义或初始化它。