我不确定我是否正确这样做,但我一直收到错误,说我的数组"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语句都位于同一方法中.
像这样做
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)
您的案例标签使用花括号定义内部本地范围.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没有初始化.
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |