2015-12-26 57 views
0

我有一個int變量設置了一個特定的值,當在GUI上單擊JButton時,按鈕可見性設置爲false,並且計數器變量應該減1。一旦它達到0,if語句被執行。問題是計數器變量每次點擊一個按鈕時都會重置。這是我的代碼actionevent的計數器變量

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 
    } 
+1

'問題是計數器變量每次都得到重置'爲什麼你的'someMethod()'總是將變量重置爲3? – camickr

+0

'所以intVar真的等於myarraylist.size()。' - 那麼你應該使用myArrayList.size()並去掉變量。您不需要保留重複的信息。正如你所看到的那樣,它會引起問題 – camickr

+0

它作爲一個計數器,但我需要存儲什麼數字它的所以我可以使用if語句我發佈我的實際代碼的pastebin下面 – ugCode

回答

3

someMethod()將計數器復位到3。因此它會總是回報3。因此您的if塊永遠不會被執行。

someMethod()在邏輯上等同於以下,禁止任何併發詭計:

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

因此您actionPerformed(...)在邏輯上等同於以下(同上):

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

如果計數器應該只是減少,並且當intVar == 0只是在您的比較中直接使用intVar時應該執行if塊:

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

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

或者刪除someMethod()分配:

public int someMethod() { 
    return intVar; 
} 

或者,在這裏得到擺脫someMethod()調用和返回更新後的計數器值 'anotherMethod()' 改變代碼:

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

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

其因在法someMethod()你總是最終的變量的變量的方法以外重置爲3.實例化一次。

另一個有趣的事實(與此無關),來自-127 to +128的整數存儲在整數池(緩存)中,並且範圍內的任何對值的引用都完成爲在池中對象。 (適用於整數,而不是整數)

+0

我相信整數池信息僅用於Integer對象而不是int,因此不適用於此應用程序。 1+的其他信息。 –

+0

我實際上有另一種方法,在那裏它讀取另一個類的數據,它需要一個數組size.so intVar真的等於myarraylist.size()。當我在instantitae之外的方法,並在if語句中使用它時,我得到空指針 – ugCode

+0

您的第二段與問題中的任何內容都沒有關係。沒有關於內存消耗的問題,並且沒有理由認爲該代碼中的任何變量的類型是「Integer」而不是「int」。 – RealSkeptic