Java:如果条件只检查一次

Java:如果条件只检查一次,java,if-statement,conditional,Java,If Statement,Conditional,我正在尝试用Java创建一个简单的Android应用程序,代码如下: public class MainActivity extends Activity { //Declare variables boolean first = true; boolean secondorbefore = true; Button ClickMe = (Button) findViewById(R.id.clicker); ClickMe.setO

我正在尝试用Java创建一个简单的Android应用程序,代码如下:

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新手,所以我可能犯了一个非常明显的错误

非常感谢。

将此
if(first=true)
更改为
{if(first=true){

此处=是赋值运算符。但==是相等运算符。

将此
if(first=true)
更改为
{if(first==true){

Here=是赋值运算符。但是==是相等运算符。

提示:

  • =
    是赋值运算符
  • =
    是一个相等运算符
  • 在if语句中使用赋值运算符时会发生什么情况
  • 在if语句中使用equalityoperator时会发生什么情况
    • 提示:

      • =
        是赋值运算符
      • =
        是一个相等运算符
      • 在if语句中使用赋值运算符时会发生什么情况
      • 在if语句中使用equalityoperator时会发生什么情况

      如果您使用
      =
      而不是
      =
      ,您是在分配一个值,而不是进行比较。分配的返回值就是被分配的值。因此,在这种情况下,它将是
      真的
      ,因此:

      if(bool = true){...}
      


      在比较中是等效的。区别在于
      bool
      将从此语句中携带新值。

      如果使用
      =
      而不是
      =
      ,则是赋值而不是比较。而赋值的返回值就是被赋值的值。因此,在这种情况下,它将是
      true
      ,因此:

      if(bool = true){...}
      


      在比较中是等效的。区别在于
      bool
      将从此语句中携带新值。

      检查变量是否等于其他变量时,始终使用
      =


      检查变量是否等于其他变量时,请始终使用
      ==


      条件下,如果
      条件下,您必须始终使用
      =
      运算符进行比较,而不是使用单个
      =
      。因此:

      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
       }
      

      条件下,如果
      条件下,您必须始终使用
      =
      运算符进行比较,而不是使用单个
      =
      。因此:

      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
       }
      

      尝试if(first==true)和if((secondorbefore==true)@ZouZou,这应该是答案:)尝试if(first==true)和if((secondorbefore==true)@ZouZou,这应该是答案:)@Alnitak不适用于布尔型:)即使如此,IMHO。编译器的常见提示是,如果((var=true))将赋值包装在另一对大括号中,告诉它您知道在其他语言中正在做什么
      @Alnitak不适用于布尔型:)即使如此,IMHO。编译器的常见提示是告诉它你知道你在用其他语言做什么,将赋值包装在另一对大括号中,即
      if((var=true))