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 所以如果它被调用两次,你的代码将不会触发。

如果将 int 更改为布尔值,使用访问器使其成为退出者的成员变量,它会更好地工作。

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

quitVar在 main() 方法之外声明变量并将变量声明为static

声明成员变量

变量范围

静态变量

于 2013-08-30T03:28:02.500 回答