我使用Eclipse收到此错误。
重复本地变量cape
我真的不明白为什么我会收到这样的错误。这是我的代码:
switch (frame) { // frame is an integer
case 0:
Sprite cape = modules.get(Module.CAPE);
//cape.setRegion(region);
cape.translateY(+1);
break;
case 1:
Sprite cape = modules.get(Module.CAPE);
//cape.setRegion(region);
cape.translateY(-1);
break;
default:
throw new IllegalArgumentException(
"Undefined frame number: " + frame);
}
为什么cape变量对于每种情况都是本地的,而不是switch语句?
答案 0 :(得分:10)
整个switch
语句与其他语句一样是一个代码块。但是你可以在代码块中创建代码块,所以:
case 0: {
// code here
}
case 1: {
// other code here
}
(如果switch
在这方面受到特别对待,则无法完成此操作)
答案 1 :(得分:7)
答案 2 :(得分:7)
每个案例都在同一个块中,特别是{}
语句的switch
。即使不同的情况定义相同的变量,这也是同一个块。
通过添加{}
s:
case 0:
{
Sprite cape = modules.get(Module.CAPE);
//cape.setRegion(region);
cape.translateY(+1);
}
break;
case 1:
{
Sprite cape = modules.get(Module.CAPE);
//cape.setRegion(region);
cape.translateY(-1);
}
break;
或者您可以在cape
之前简单地声明switch
,以便在那里使用参考。
Sprite cape;
switch (frame) { // frame is an integer
case 0:
cape = modules.get(Module.CAPE);
和案例1类似。
答案 3 :(得分:0)
您应该在cape
声明之外声明switch
变量:
Sprite cape;
switch (frame) {
case 0:
cape = modules.get(Module.CAPE);
//cape.setRegion(region);
cape.translateY(+1);
break;
case 1:
cape = modules.get(Module.CAPE);
//cape.setRegion(region);
cape.translateY(-1);
break;
default:
throw new IllegalArgumentException(
"Undefined frame number: " + frame);
}