Java actionevent的计数器变量

Java actionevent的计数器变量,java,swing,variables,jbutton,Java,Swing,Variables,Jbutton,我有一个int变量,它被设置为某个值,当在GUI上单击JButton时,按钮可见性被设置为false,计数器变量应该减少一个。一旦它达到0,就会执行if语句。问题是每次单击按钮时计数器变量都会被重置。这是我的密码 public int someMethod(){ intVar= 3; return intVar; } public void anotherMethod(){ intVar--; } public void actionPerformed(ActionEv

我有一个int变量,它被设置为某个值,当在GUI上单击JButton时,按钮可见性被设置为false,计数器变量应该减少一个。一旦它达到0,就会执行if语句。问题是每次单击按钮时计数器变量都会被重置。这是我的密码

public int someMethod(){
    intVar= 3;
    return intVar;
}

public void anotherMethod(){
    intVar--;
}
public void actionPerformed(ActionEvent e) {
if (someCondition){
            clickedButton.setVisible(false);
            anotherMethod();
            if (someMethod()==0){
  //Do something
  }

这是因为在method
someMethod()
中,始终会将变量重置为3。仅在方法外部实例化变量一次


另一个有趣的事实(与此无关),从
-127到+128的整数存储在整数池(缓存)中,对该范围内的值的任何引用都是对池中的对象进行的。(仅适用于整数而不适用于整数)

这是因为在方法
someMethod()
中,始终会将变量重置为3。仅在方法外部实例化变量一次

另一个有趣的事实(与此无关),从
-127到+128的整数存储在整数池(缓存)中,对该范围内的值的任何引用都是对池中的对象进行的。(仅适用于整数而不适用于整数)

您的
someMethod()
将计数器重置为3。因此,它将始终返回
3
。因此,
if
块将永远不会执行

someMethod()
在逻辑上等同于以下内容,除非出现任何并发诡计:

public int someMethod() {
    intVar = 3;
    return 3;
}
因此,您的
actionPerformed(…)
在逻辑上等同于以下内容(同上):

如果计数器刚好减少,并且当
intVar==0
时应执行If块,则直接在比较中使用intVar:

public int anotherMethod(){
    return --intVar;
}

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        anotherMethod();
        if (intVar==0){
            //Do something
        }
    }
}
或者,从
someMethod()
中删除分配:

或者,去掉这里调用的
someMethod()
并从'anotherMethod()'返回更新的计数器值,以将代码更改为:

public int anotherMethod(){
    return intVar--;
}

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        if (anotherMethod()==0){
            //Do something
        }
    }
}
您的
someMethod()
将计数器重置为3。因此,它将始终返回
3
。因此,
if
块将永远不会执行

someMethod()
在逻辑上等同于以下内容,除非出现任何并发诡计:

public int someMethod() {
    intVar = 3;
    return 3;
}
因此,您的
actionPerformed(…)
在逻辑上等同于以下内容(同上):

如果计数器刚好减少,并且当
intVar==0
时应执行If块,则直接在比较中使用intVar:

public int anotherMethod(){
    return --intVar;
}

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        anotherMethod();
        if (intVar==0){
            //Do something
        }
    }
}
或者,从
someMethod()
中删除分配:

或者,去掉这里调用的
someMethod()
并从'anotherMethod()'返回更新的计数器值,以将代码更改为:

public int anotherMethod(){
    return intVar--;
}

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        if (anotherMethod()==0){
            //Do something
        }
    }
}


问题是计数器变量每次都会被重置
为什么
someMethod()
总是将变量重置为3?
因此intVar实际上等于myarraylist.size()。
-那么您应该使用myarraylist.size()并去掉该变量。您无需保留重复的信息。正如你所看到的,它会引起问题。不过,它是一个计数器,我需要存储它的编号,这样我就可以使用我在下面贴出的实际代码的if语句。ArrayList方法是你的计数器。每次要检查ArrayList中有多少项时,只需调用该方法。
问题是每次都会重置计数器变量
为什么
someMethod()
总是将变量重置为3?
因此intVar实际上等于myarraylist.size()。
-那么应该使用myarraylist.size()然后去掉这个变量。您无需保留重复的信息。正如你所看到的,它会引起问题。不过,它是一个计数器,我需要存储它的编号,这样我就可以使用我在下面贴出的实际代码的if语句。ArrayList方法是你的计数器。只要在每次需要检查ArrayList中有多少项时调用该方法即可。我认为整数池信息仅适用于整数对象,而不适用于整数,因此不适用于此应用程序。我实际上有另一个方法,在该方法中,它从另一个类读取数据,它采用数组大小。因此intVar实际上等于myarraylist.size()。当我在方法外实例化它并在if语句内使用它时,我得到空点。你的第二段与问题中的任何内容都没有联系。没有关于内存消耗的问题,也没有理由假设代码中的任何变量是
Integer
类型,而不是
int
@HovercraftFullOfEels感谢您在这里纠正我。答案应该是:答案。它们不应包含与问题无关的信息。当信息相关时,在回答有关
整数
类型的问题时共享该信息。不相关的信息令人困惑,可能会损害正确搜索答案的能力,而且没有帮助。我认为整数池信息仅适用于整数对象,而不是整数,因此不适用于此应用程序。我实际上有另一个方法,在该方法中,它从另一个类读取数据,它采用数组大小。因此intVar实际上等于myarraylist.size()。当我在方法外实例化它并在if语句内使用它时,我得到空点。你的第二段与问题中的任何内容都没有联系。没有关于内存消耗的问题,也没有理由假设代码中的任何变量是
Integer
类型,而不是
int
@HovercraftFullOfEels感谢您在这里纠正我。答案应该是:答案。它们不应包含与问题无关的信息。当信息相关时,在回答有关
整数
类型的问题时共享该信息。无关的信息令人困惑,妈