我一直有一个问题,当我在键盘上输入一个键时,它一直返回键盘代码,例如,当我按1时,它返回的值为 49
我已尝试更改要使用的数据类型 char
这个问题还在发生。它似乎只在我的一个方法中输出键盘代码,而不是用于 addKeyListener
我有办法。当我打印出 SETSIZE
变量返回正确的输入,但是在我调用的方法中 assignMove
这个 num
参数一直输出键盘代码,我不知道为什么。谢谢你的帮助。
panelcell类
private GamePanel panel;
private int row;
private int col;
public static final char SETSIZE = 5;
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char SETSIZE = e.getKeyChar();
panel.assignMove(row, col, SETSIZE);
}
});
游戏面板类
void assignMove(int row, int col, int num)
{
System.out.print(num);
if ((row<1) || (row>Futoshiki.SETSIZE)) {
JOptionPane.showMessageDialog(null,
"invalid row (" + row + ")",
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid row (" + row + ")");
}
if ((col<1) || (col>Futoshiki.SETSIZE)) {
JOptionPane.showMessageDialog(null,
"invalid column (" + col + ")",
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid column (" + col + ")");
}
if (game.isAssigned(row, col)) {
JOptionPane.showMessageDialog(null,
"the cell at (" + row + "," + col + ") is assigned (" + game.getNum(row,col) + ")",
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("the cell at (" + row + "," + col + ") is assigned (" + game.getNum(row,col) + ")");
}
if ((num<1) || (num>Futoshiki.SETSIZE)) {
JOptionPane.showMessageDialog(null,
"invalid value " + num,
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid value " + num);
}
if (!game.isValidAssign(row, col, num)) {
JOptionPane.showMessageDialog(null,
"invalid value assignment " + row + " " + col + " " + num,
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid value assignment " + row + " " + col + " " + num);
}
Assign userMove = new Assign(row, col, num);
System.out.print("row " + row + " " + "col "+ col + " " + "num " + num);
game.assign(userMove);
}
2条答案
按热度按时间bvjxkvbb1#
char
是java中的基元类型。它是一个16位无符号整数,表示unicode码位。它不包含键盘上显示的值。你可以使用类的方法
java.lang.Character
获取“键盘”值。或者,您可以简单地检查值。
omqzjyyz2#
使用
char num
在assignMove
方法而不是int num
. 因为你的num
参数是int
,的char
正在传递的值将类型转换为int
这将是ascii码。样品: