Java:如何访问在switch语句中声明的变量

L45*_*457 2 java arrays scope

我不确定我是否正确这样做,但我一直收到错误,说我的数组"currentRoute"无法解析为变量.我假设这是因为我已经在不同的范围内声明了数组.有没有什么方法可以让我的工作仍然在我的switch语句中声明变量,同时仍然使用一个简单的数组?(我不能使用arraylist,因为我的其余代码会受到影响)

    switch (routeID)
    {
        case "1" : {
            String[] currentRoute = new String[Route1.length];
            currentRoute = Route1;
        }
        case "96" : {
            String[] currentRoute = new String[Route96.length];
            currentRoute = Route96;
        }
    }

    // print out values in currentRoute
    for (int i = 0; i < currentRoute.length; i++)
    {
        System.out.println(currentRoute[i]);
    }
Run Code Online (Sandbox Code Playgroud)

还有更多的switch语句,但我刚刚为这个例子包含了2个.

编辑:switch和for语句都位于同一方法中.

vit*_*tro 7

像这样做

String[] currentRoute = null;
switch (routeID)
{
    case "1" : {
        currentRoute = Route1;
    }
    case "96" : {
        currentRoute = Route96;
    }
}

if (currentRoute != null )
    // print out values in currentRoute
    for (int i = 0; i < currentRoute.length; i++)
    {
       System.out.println(currentRoute[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)


das*_*ght 5

您的案例标签使用花括号定义内部本地范围.Java中的一般规则是,当您位于外部作用域时,无法从内部作用域访问变量(但是,在内部作用域之前定义的外部作用域中的变量保持可见).因此,无法访问currentRoute交换机内部定义的内容.

解决方案是在交换机currentRoute 外部定义,交换机内部进行分配,并在交换机结束后继续访问变量:

String[] currentRoute;
switch (routeID) {
    case "1" : {
        currentRoute = Route1;
    }
    case "96" : {
        currentRoute = Route96;
    }
    default:
        currentRoute = new String[0];
}
Run Code Online (Sandbox Code Playgroud)

请注意,您的代码也有冗余 - 在内部的两个声明中,currentRoute您为其分配了一个新数组,然后立即丢弃该值.

另请注意,我添加了默认值.没有默认值,Java编译器会抱怨currentRoute没有初始化.