2012-03-06 69 views
1

我得到這個錯誤,我真的不明白爲什麼。代碼:即使稍後分配變量也是如此?

b1.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      boolean b = true; 
      if(b == true){ 
       tv1.setText("true"); 
       b2.setEnabled(false); 
       b = false; 

      } else 

       if(b == false){ 
       b2.setEnabled(true); 
       b = true; 
       tv1.setText("false"); 

正如你可以看到,我試圖讓當按鈕被點擊它會檢查是否變量「b」是真的還是假的,然後它應該做下面的代碼。但它不!它只會執行「if b == true」的操作。你可以幫我嗎?

+0

在onClick方法之外聲明布爾b,它會起作用,你所做的錯誤是每次單擊按鈕時都將變量b設置爲true,所以else子句中的代碼將永遠不會執行 – Houcine 2012-03-06 18:14:53

回答

4

也許由於B是總是正確的以下這種說法:

boolean b = true; 

此外,B是一個布爾值,你可以簡單的寫:

if (b) { 
// 
} else { 
// 
} 

這可能工作像您期望的(未測試) :

b1.setOnClickListener(new View.OnClickListener() { 

    private boolean b = true; 

    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     if(b){ 
      b2.setEnabled(false); 
      tv1.setText("true"); 
     } else { 
      b2.setEnabled(true); 
      tv1.setText("false"); 
     } 

     b = !b; //this changes b from true to false and vice versa at each call 
    } 
    }); 
+0

這不是問題所在。 – Gandarez 2012-03-06 18:13:09

+1

@Gandarez這是問題所在。至於解決方案,我不確定OP想要達到什麼 - 你提出的解決方案可能是他的問題。 – assylias 2012-03-06 18:15:43

+1

最初的問題是當我在按鈕中第二次點擊並且變量b仍然爲true時發生的情況。 – Gandarez 2012-03-06 18:20:05

1

您必須在聽衆外部聲明變量b

boolean b = true; 
b1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      if(b == true){ 
       tv1.setText("true"); 
       b2.setEnabled(false); 
       b = false; 

      } else 

       if(b == false){ 
       b2.setEnabled(true); 
       b = true; 
       tv1.setText("false"); 
0

你想使用static修飾符來保持變量的狀態(因爲它的狀態不會被保留,當它超出範圍。)這也意味着你必須移動的變量走出全球範圍。

+0

這將工作在C ...但這是Java。 (範圍確定是一個問題,但是在Java中,添加'static'修飾符在這種情況下甚至是無效的。) – 2012-03-06 18:22:36

1

變量'b'是方法範圍內的局部變量,所以當onClick()方法執行時它總是爲真。您需要將該變量移到類範圍中。就像這樣:

b1.setOnClickListener(new View.OnClickListener() { 

    boolean b = true; 

    public void onClick(View arg0) { 
     if (b) { 
      tv1.setText("true"); 
      b2.setEnabled(false); 
      b = false; 

     } else { 
      b2.setEnabled(true); 
      b = true; 
      tv1.setText("false"); 
     } 
    } 

}); 
+0

我編輯了示例代碼以正確顯示代碼應該是什麼。 – 2012-03-06 18:31:48

+0

謝謝,但它沒有奏效。我有這2個按鈕,當我按下其中一個時,另一個應該是不可壓縮的,但如果我再按一次,我應該再次按下。但我的按鈕保持不可壓縮 – Frederikzt 2012-03-06 18:32:46

+0

只需刪除函數中的布爾b = true「內部」。讓外面的一個留下。那會工作。 – 2012-03-06 18:35:26

0

從您豎起的代碼,這是我能想到的原因:

最初,你的b變量提供設置爲true。因此,它進入b == true條件。

但是,當你設置b==false「裏面」,如果,它不會去其他。原因很簡單,因爲當你已經去過「if」語句時,這是if語句被驗證爲真的條件,計算機不需要查找「else」語句,因此不會進入它。

如果你有兩個連續的ifs而不是其他的,你的事情會按照你期望的方式工作。

+0

好吧,我現在已經刪除了「其他」,但它沒有工作:(我理解它嗎? – Frederikzt 2012-03-06 18:30:19

相關問題