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

时间:2014-04-26 02:20:32

标签: 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]);
    }

还有更多的switch语句,但我刚刚在本例中包含了2个。

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

2 个答案:

答案 0 :(得分: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]);
    }
}

答案 1 :(得分:5)

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

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

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

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

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