我不确定我是否正确行事,但我一直收到错误,说我的数组“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语句都位于同一方法中。
答案 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
没有被初始化。