Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyListener忽略if语句_Java_If Statement_Keylistener - Fatal编程技术网

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){
是的..如果存在代码改进,总是很好的。哇,你解释了它,我觉得真的很愚蠢。谢谢你的帮助!