Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 面向对象编程有两种方法吗?_Java_Oop_Keyevent - Fatal编程技术网

Java 面向对象编程有两种方法吗?

Java 面向对象编程有两种方法吗?,java,oop,keyevent,Java,Oop,Keyevent,我在为一个小游戏编写代码时遇到了一个问题。在下面的代码中,我尝试使用面向对象编程。 当我使用KeyEvent时,我想我需要使用2种方法,但是由于某些原因,找不到int key。有人能帮我吗 class KeyEvt { void keyPressed (KeyEvent e) { int key = e.getKeyCode(); } } class Dodger { public

我在为一个小游戏编写代码时遇到了一个问题。在下面的代码中,我尝试使用面向对象编程。 当我使用KeyEvent时,我想我需要使用2种方法,但是由于某些原因,找不到int key。有人能帮我吗

    class KeyEvt {
        void keyPressed (KeyEvent e) 
        {
            int key = e.getKeyCode();
        }
    }
    class Dodger {
        public static void main (String args[])

        {
            boolean GameOver = false;
            int obst;
            KeyEvt left = new KeyEvt();

            do
            {
                obst = (int) (Math.random() * 4) +1;
                if (obst == 1)
                {
                    System.out.println("   ---");
                    if (KeyEvt.key == KeyEvent.VK_LEFT){}
                }

在类
KeyEvt
中,您没有声明实例变量
key
,而是在
中声明方法变量
key
。此方法变量将在方法完成后立即“disappear”

为了在方法完成后保留该值,需要将其声明为实例变量:

class KeyEvt {
    public int key;
    void keyPressed (KeyEvent e) 
    {
        key = e.getKeyCode();
    }
}
您还需要访问
KeyEvt
类的实例,而不是
KeyEvt
类本身:

if (left.key == KeyEvent.VK_LEFT){}

显然,这缺少很多封装(
可由其他人修改),由于原始的
KeyEvent
已经有了keycode,问题出现了,为什么你需要一个
KeyEvt
类,因为
KeyEvent
类提供了你所需要的。

请添加一些关于发生了什么的更多信息,并询问一个特定的问题,而不是它不起作用。请帮助是否有任何错误消息考虑到您忘记共享的内容?最好将
key
设置为
private
并像我写的那样添加
getter
,这样就完全没有封装性,而且根本不需要
KeyEvt
类。然而,OP当前的问题是实例变量,后面还会有其他问题:-)非常感谢,非常感谢您的帮助是的,也许,当浏览代码时,我可以看到几个问题。我的建议是在非常小的步骤中构建代码,在运行小步之前不要继续。