switch语句中的重复局部变量

时间:2014-03-13 18:31:03

标签: java eclipse switch-statement

我使用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语句?

4 个答案:

答案 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);
}