2013-04-09 48 views
1

我試圖創建一個簡單的Java Android應用程序用下面的代碼:的Java:如果條件只被檢查一次

public class MainActivity extends Activity { 

    //Declare variables 
    boolean first = true; 
    boolean secondorbefore = true; 

     Button ClickMe = (Button) findViewById(R.id.clicker); 

     ClickMe.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //Check to see if this is the first click 
       if (first = true) { 
       first = false; 
       // DO STUFF FOR FIRST CLICK 
       } else if ((secondorbefore = true) { 
        //so this is the second click? 
        secondorbefore = false; 
       // DO STUFF FOR SECOND CLICK     
        } else { 
        //OK it's the third click or later 
       // DO STUFF FOR THIRD OR LATER CLICKS 
       } 
      } 
     }); 


    } 

然而,似乎只有通過if條件運行一次。它在第一個實例中執行代碼,包括將secondorbefore變量設置爲false,但隨後的點擊似乎什麼都不做。代碼OnClickListener正在隨後的點擊中執行,但它只是沒有運行條件語句。

Java新手,所以我可能犯了一個非常明顯的錯誤。

非常感謝提前。

+1

嘗試,如果(第一==真),如果((secondorbefore ==真) – 2013-04-09 13:04:43

+0

@ZouZou,這應該是答案:) – 2013-04-09 13:05:12

回答

6

提示:

  • =是賦值運算符。
  • ==是一個相等運算符。
  • 在if語句中使用賦值運算符時會發生什麼?
  • 在if語句中使用equalityoperator時會發生什麼?
+0

回答#3 _should_是一個編譯器警告。 .. – Alnitak 2013-04-09 13:07:14

+0

@Alnitak不在布爾人雖然:) – PermGenError 2013-04-09 13:07:51

+0

即使那樣,恕我直言。編譯器告訴它你知道你在其他語言中做什麼的常見提示是將該賦值包裝在另一對括號中,即'if((var = true))' – Alnitak 2013-04-09 13:11:24

2

改變此if (first = true){ if (first == true) {

這裏=是一個賦值操作符。但==是相等運算。

3

如果您使用=而不是==您正在分配值而不是比較。並且歸還的價值是被分配的價值。因此,在這種情況下,這將是true所以:

if(bool = true){...} 

if(true){...} 

是在比較等價。不同之處在於bool將帶有此聲明中的新值。

1

當檢查變量是否等於別的東西總是使用==

public void onClick(View v) { 
    //Check to see if this is the first click 
    if (first == true) { 
     first = false; 
     // DO STUFF FOR FIRST CLICK 
    } else if ((secondorbefore == true) { 
     //so this is the second click? 
     secondorbefore = false; 
     // DO STUFF FOR SECOND CLICK     
    } else { 
     //OK it's the third click or later 
     // DO STUFF FOR THIRD OR LATER CLICKS 
    } 
} 
3

if狀況下,你總是必須使用==運營商進行比較和=。因此,這將是:

if (first == true) { // this is comparison 
     first = false; // this is assignment 
     // DO STUFF FOR FIRST CLICK 
} else if ((secondorbefore == true) { 
     //so this is the second click? 
     secondorbefore = false; 
     // DO STUFF FOR SECOND CLICK     
} else { 
     //OK it's the third click or later 
     // DO STUFF FOR THIRD OR LATER CLICKS 
}