0

ここに、キーが押されたときにウィンドウ内で銃を動かすことを目的としたクラスがあります。ただし、型から非静的メソッドを参照する際にエラーが発生します。これが2つの部分です。エラーは、2つの「if(k==.....」行で発生します。

private class Keyboard extends KeyAdapter {

    public void keyPressed (KeyEvent e) {

        int k = e.getKeyCode();

        if (k == 39) {Gun.move(10);}
        if (k == 37) {Gun.move(-10);}

    }

}

public class Gun {

        private Color color;
        private int A,B,C,D;
        private int E,F,G,H;

        public Gun (Color c) {

            color = c;
            A = 375;
            B = 550;
            C = 50;
            D = 10;
            E = 395;
            F = 540;
            G = 10;
            H = 10;

        }

        public void move(int xAmount){

            A = A + xAmount;
            E = E + xAmount;

        }

    }
4

3 に答える 3

4

どれGunインスタンス、Gunつまり次のように作成されたオブジェクトへの参照が必要です。

Gun gun = new Gun(...);
gun.move(amount);

あなたのKeyboardオブジェクトは何らかの方法でこのGunオブジェクトへの参照を持っている必要がありますGun.

于 2012-12-03T23:45:42.663 に答える
0

静的メソッドは、オブジェクトの特定のインスタンスに固有ではないメソッドです。ある銃を別の銃(インスタンス変数)と異なるものにするものには作用しません。移動方法は静的ではありません。ある銃を動かします。

あなたがそれを次のように呼ぶとき:

Gun.move(10)

特定の銃ではなく、すべての銃で呼び出しています(したがって、静的メソッドに関するエラー)。銃を動かすには、動かしたい銃が必要です。したがって、(を使用して)新しい銃を作成する必要がありますnew Gun(...)

于 2012-12-03T23:51:07.567 に答える
0

moveメソッド非静的メソッドであるため、クラス Gun のインスタンスで呼び出す必要があります。

    Gun gun = new Gun();//creating an instance of a Gun class.            
    if (k == 39) {gun.move(10);}
    if (k == 37) {gun.move(-10);}
于 2012-12-03T23:46:03.333 に答える