1

メソッド内で使用できる変数を作成して、メソッド外でその変数を変更したいと考えています。ビジュアルとして:(ちなみにスキャナークラスをインポートしました)

public static void main(String[] args) {

    int quitVar = 1;
    Scanner scan = new Scanner(System.in);

    class IWantToQuit {
        public void quit() {
            quitVar++; //This is the problem area.
        }
    }
    IWantToQuit quiter = new IWantToQuit();
    while (quitVar == 1) {
        System.out.println("HELLO");
    System.out.println("Type QUIT to quit.");
    choice = scan.next();
    if (choice.equals("QUIT")) {
        quiter.quit();
    }

何らかの理由で、ローカル変数 quitVar が内部クラスによってアクセスされると書かれていますが、宣言する必要があり、宣言しました。どんな助けでも大歓迎です。

4

3 に答える 3

3

メソッド内で定義されているため、このローカル内部クラス。ローカル内部クラスのルールは次のとおりです。

ローカル クラスは、それを囲むクラスのメンバーにアクセスできます。

さらに、ローカル クラスはローカル変数にアクセスできます。ただし、ローカル クラスは、final と宣言されたローカル変数にのみアクセスできます。

今回はローカル変数なので、ローカルクラス内でアクセスできるようquitVarに宣言する必要があります。finalしかし、それを宣言するとfinal、インクリメントできません。

この変数にアクセスできるようにする場合は、ローカル変数ではなくクラス変数として定義します。

于 2013-08-30T03:27:14.203 に答える
2

他の人があなたに解決策を提供していますが、実際にあなたがやろうとしていることは良い考えではありません.

グローバル変数は、ほとんどの開発者によってアンチ パターンとして広く認識されているため、他にできることがあるかもしれません。

何かをインクリメントしていますが、1 をテストしているため、2 回呼び出されてもコードはトリガーされません。

intをブール値に変更する場合は、アクセサーを使用してquitterのメンバー変数にすると、はるかにうまく機能します。

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);

    class IWantToQuit {
        private boolean hasQuit = false;
        public void quit() {
            hasQuit = true;
        }

        boolean hasQuit() {
            return hasQuit;
        }
    }

    IWantToQuit quiter = new IWantToQuit();
    while (!quiter.hasQuit()) {
        System.out.println("HELLO");
        System.out.println("Type QUIT to quit.");
        String choice = scan.next();
        if (choice.equals("QUIT")) {
           quiter.quit();
        }
    }
}
于 2013-08-30T03:42:25.353 に答える
0

quitVarmain() メソッドの外側で変数を宣言し、変数を次のように宣言します。static

メンバー変数の宣言

可変範囲

静的変数

于 2013-08-30T03:28:02.500 に答える