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

问题描述 投票:0回答: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;
int[] array = new int[3];
那样声明它,然后使用 switch 语句,它会说我正在尝试重新声明它。

如何解决这个问题?最终的想法是能够基于某种逻辑(switch 语句)在一行代码中初始化一个包含 10 个值的数组。

java arrays oop initialization int
5个回答
15
投票

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

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

1
投票

我会告诉你将数组声明放在 switch 块之外,但是,你不能在声明后使用

= { 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
投票

我之前也有同样的疑问。希望这对您有帮助。

首先马克·拜尔斯是绝对正确的。 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.

的原则

因此,最好的方法是在开关外部声明它,并根据您喜欢的情况定义或初始化它。


0
投票

我已将@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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.