如何在 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 个值的数组。
将声明放在 switch 语句之前。您还需要显式实例化正确类型的数组。
int[] array;
switch (something) {
case 0: array = new int[] {1, 2, 3}; break;
default: array = new int[] {3, 2, 1};
}
我会告诉你将数组声明放在 switch 块之外,但是,你不能在声明后使用
= { 1, 2, 3}
语法。您需要以常规方式初始化它,如array = new int[] {1, 2, 3};
int[] array;
switch (something) {
case 0: array = new int[]{1, 2, 3}; break;
default: array = new int[]{3, 2, 1};
}
我之前也有同样的疑问。希望这对您有帮助。
首先马克·拜尔斯是绝对正确的。 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.
的原则
因此,最好的方法是在开关外部声明它,并根据您喜欢的情况定义或初始化它。
我已将@Mark Byers提供的答案代码重组为Java方法,您可以轻松地将其合并到您的开发中:
public class Post10922519 {
public static int[] initializeIntArrayInSwitch(int something) {
int[] array;
switch (something) {
case 0: array = new int[] {1, 2, 3}; break;
default: array = new int[] {3, 2, 1};
}
return array;
}
}