在java中为switch case语句使用数组

在java中为switch case语句使用数组,java,arrays,io,switch-statement,Java,Arrays,Io,Switch Statement,我正在制作一个游戏,我希望控件可以编辑。嗯,我已经记下了那个部分,但它们正在一个.txt文件中读取和更改。这就是我现在想要的工作方式。这些值存储为键值(即KeyEvent.VK_W等于83,因此该行的值为83)。我还让它读取值并将它们保存到核心类中的字符串数组变量中。在我的key事件类中,处理键的推送的类,我让它引用数组来检查命令键是否被推送。我不断遇到这样的错误:尝试时,case表达式必须是常量表达式。这是错误的代码: switch(key){ case Integer.parseInt(

我正在制作一个游戏,我希望控件可以编辑。嗯,我已经记下了那个部分,但它们正在一个.txt文件中读取和更改。这就是我现在想要的工作方式。这些值存储为键值(即KeyEvent.VK_W等于83,因此该行的值为83)。我还让它读取值并将它们保存到核心类中的字符串数组变量中。在我的key事件类中,处理键的推送的类,我让它引用数组来检查命令键是否被推送。我不断遇到这样的错误:
尝试时,case表达式必须是常量表达式。这是错误的代码:

switch(key){
  case Integer.parseInt(commands[1]):
      ...
      break;
}
我得到了这个错误。
命令[1]
的值为83。它是“W”的值。以下是我对变量的声明:

for (int i = 0; i < commands.length; i++) {
                commands[i] = io.readSpecificLine(FILES.controlsFileFinalDir,
                        i + 1);
}
for(int i=0;i

如果我让它打印出每一个值,它就行了。我试着让数组成为final,但没有成功。大约两年前,我曾经遇到过这个解决方案,但我再也找不到了。有人对如何解决这个问题有什么想法吗?提前谢谢

正如编译器所说,case表达式必须是常量表达式。不能将数组元素用作大小写表达式。您只需使用
if
/
else if
/
else
子句即可。正如编译器所说,大小写表达式必须是常量表达式。不能将数组元素用作大小写表达式。只需使用
if
/
else if
/
else
子句即可。

不能在
case
语句中使用非常量表达式。另一种方法是构建从值到操作的映射。因此,与此相反(这对我来说毫无意义):

您可以这样做:

static Map<Integer, Runnable> keyMap = new HashMap<Integer, Runnable>();
static {
    keyMap.put(83, new Runnable() {
        @Override
        public void run() {
            // actions for code 83
        }
    });
    . . .
}

如果需要将变量传递给动作,可以定义自己的接口,而不是对动作使用
Runnable

不能在
case
语句中使用非常量表达式。另一种方法是构建从值到操作的映射。因此,与此相反(这对我来说毫无意义):

您可以这样做:

static Map<Integer, Runnable> keyMap = new HashMap<Integer, Runnable>();
static {
    keyMap.put(83, new Runnable() {
        @Override
        public void run() {
            // actions for code 83
        }
    });
    . . .
}

如果您需要将变量传递给操作,您可以定义自己的接口,而不是对操作使用
Runnable

我觉得切换非常简单和整洁。我真的在寻找一种方法来修复错误,同时(希望)保留数组并确保开关:\See以获取编译时常量的描述。@mamdouh:在java 7中,可以使用字符串作为开关标签,但它们仍然必须是常量。看,我终于去了愚蠢的if/else语句。我接受了它,因为这是我使用的解决方案。谢谢我觉得这个开关更容易,更整洁。我真的在寻找一种方法来修复错误,同时(希望)保留数组并确保开关:\See以获取编译时常量的描述。@mamdouh:在java 7中,可以使用字符串作为开关标签,但它们仍然必须是常量。看,我终于去了愚蠢的if/else语句。我接受了它,因为这是我使用的解决方案。谢谢
Runnable action = keyMap.get(Integer.parseInt(commands[1]));
if (action != null) {
    action.run();
} else {
    // default action
}