Java 大小写表达式必须是常量表达式
我有一个任务是建立一个游戏bord。。。 我希望用户将程序放入他想要玩的键中。 问题是Java要求在开关的情况下,将是const。。。 这样做的目的是为KeyListener创建一个类型继承,然后我将它添加到其适当的播放器中 所需密钥作为参数Java 大小写表达式必须是常量表达式,java,syntax-error,Java,Syntax Error,我有一个任务是建立一个游戏bord。。。 我希望用户将程序放入他想要玩的键中。 问题是Java要求在开关的情况下,将是const。。。 这样做的目的是为KeyListener创建一个类型继承,然后我将它添加到其适当的播放器中 所需密钥作为参数int[]Keys 我见过一些人通过添加“static final”来提供类似问题的解决方案,不幸的是,它没有帮助 这是我的密码: import java.awt.event.KeyEvent; import java.awt.event.KeyList
int[]Keys
我见过一些人通过添加“static final”来提供类似问题的解决方案,不幸的是,它没有帮助
这是我的密码:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class PlayerKeyListener implements KeyListener
{
int[] keys;
int playerID;
PlayerKeyListener(int[] keys, int playerID)
{
this.keys = keys;
this.playerID = playerID;
}
public void keyPressed(KeyEvent e)
{
System.out.println("keyPressed code : "+ e.getKeyCode());
switch (e.getKeyCode())
{
case keys[KeyboardSettings.UP]: gameBord.players[playerID].moveUp(); break;
case keys[KeyboardSettings.DOWN]: gameBord.players[playerID].moveDown(); break;
case keys[KeyboardSettings.LEFT]: gameBord.players[playerID].moveLeft(); break;
case keys[KeyboardSettings.RIGHT]: gameBord.players[playerID].moveRight(); break;
case keys[KeyboardSettings.BOMB]: gameBord.players[playerID].addBomb(); break;
default: gameBord.players[playerID].face = 0;
}
e.consume();
}
public void keyReleased(KeyEvent e)
{
System.out.println("keyReleased code : "+ e.getKeyCode());
gameBord.players[playerID].move = false;
gameBord.players[playerID].pic = 0;
e.consume();
}
public void keyTyped(KeyEvent e)
{
System.out.println("keyTyped code : "+ e.getKeyCode());
e.consume();
}
}
tnx;)
大小写表达式必须是常量表达式
你在标题中回答了自己。在case
关键字之后不能有变量
switch
命令的工作方式是在编译时必须知道所有案例(在case
关键字之后的值)
switch (e.getKeyCode()) {
case constant1: commands;
case constant2: commands;
}
键[KeyboardSettings.UP]
不是常数,而是变量。其值在运行时已知。编译器不知道那里有什么值,并对您大喊大叫:“嘿,user3142930,我需要知道case
关键字后面所有内容的值!”
在您的情况下,不能使用开关
。您应该使用一系列if-else
命令,如下所示:
// store it in a variable so you do not call the method repeatedly
final int code = e.getKeyCode();
// this is instead of your switch
if (code == keys[KeyboardSettings.UP]) {
....
}
else if (code == keys[KeyboardSettings.DOWN]) {
...
}
else if (...) {
...
}
其深层原因是,您希望用户可以配置这些键,因此您无法在编译时知道它们的值
如果你还没有理解我的最后一句话,你可以学习。使用你的常量,而不是索引到数组中。否则如果可能是你唯一的选择。@Makoto,我想op希望用户可以配置密钥。如果不是,我来了!!我知道,我生你的气了。我不喜欢像“这是我的家庭作业,帮我做”这样的问题。在提取相关代码方面投入更多精力。不要为你的任务打扰我们。问一个与Java相关的问题。把代码放在这里很好,但不是所有的代码。只有这一点是必要的。然后人们会更愿意回答,而不会给你缺点。我已经为你添加了更多的解释,但你不配:)现在你应该让我修复你的问题,这样它就不会包含任何混乱。你需要使用“==”而不是仅仅使用“=”进行比较。