Java KeyListener忽略if语句
在此代码中:Java KeyListener忽略if语句,java,if-statement,keylistener,Java,If Statement,Keylistener,在此代码中: 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("
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");
}
}
}
我试图让space只打印一次“Hello world”,然后将spacePressed
切换为true,从此以后不再执行任何操作
使用系统打印,我发现在我按下它之后,它确实会变为spacePressed
到true
,但出于某种原因,我可以再次按下space并再次打印出“Hello world”
简而言之,编译器似乎忽略了if语句,只是继续读取,这是不应该发生的。这是因为
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
可以写成!按空格键
:
if(!spacePressed){
由于
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");
}
}
}
spacePressed变量在构建代码时应该像局部变量一样工作,并且每次都将以false启动,然后设置为true,然后由于它是局部变量而被销毁。我建议OP使用
!这个.spacePressed
而不是==false
。我甚至建议OP将if
折叠为if(e.getKeyCode()==KeyEvent.VK_SPACE&!this.spacePressed){
是的..如果存在代码改进,总是很好的。哇,你解释了它,我觉得真的很愚蠢。谢谢你的帮助!