在此代码中:
public class KeyManager implements KeyListener{
public void keyPressed(KeyEvent e) {
boolean spacePressed = false;
if(e.getKeyCode() == KeyEvent.VK_SPACE){
if(spacePressed == false){
spacePressed = true;
System.out.println("Hello world");
}
}
}
我正在尝试打印空间" Hello world"一次,然后将spacePressed
切换为true,从那时起不再做任何事情。
使用系统打印件我已经设法在我按下它之后发现spacePressed
更改为true
,但出于某种原因我可以再次按空格键更多的打印" Hello world"。
简而言之,编译器似乎忽略了if语句并继续阅读,这不应该发生。
答案 0 :(得分:4)
这是因为在方法中声明了spacePressed
。每次执行该方法时,都会重新声明并初始化为false
。
在外面宣布:
public class KeyManager implements KeyListener{
boolean spacePressed = false;
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE){
if(spacePressed == false){
spacePressed = true;
System.out.println("Hello world");
}
}
}
请注意,spacePressed == false
可以写为!spacePressed
:
if(!spacePressed){
答案 1 :(得分:2)
由于spacePressed
是一个局部变量,在下次调用时,它会再次使用false
进行初始化。解决方案:将其移至KeyManager
类的字段:
public class KeyManager implements KeyListener{
private boolean spacePressed = false;
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE){
if(this.spacePressed == false){
this.spacePressed = true;
System.out.println("Hello world");
}
}
}