【问题标题】:Java: If condition only being checked onceJava:如果条件只检查一次
【发布时间】:2013-03-31 22:17:39
【问题描述】:

我正在尝试使用以下代码在 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 ((secondorbefore == true)
  • @ZouZou,这应该是答案:)

标签: java if-statement conditional


【解决方案1】:

如果您使用= 而不是==,则您正在分配一个值而不是比较。分配的返回是分配的值。所以在这种情况下它将是true 所以:

if(bool = true){...}

if(true){...}

在比较中是等价的。不同之处在于bool 将携带此语句中的新值。

【讨论】:

    【解决方案2】:

    ifconditions 中,您始终必须使用== 运算符进行比较,而不是单个=。所以它会是:

    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
     }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        提示:

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

        【讨论】:

        • @Alnitak 在布尔值的情况下不是 :)
        • 即便如此,恕我直言。编译器告诉它你知道你在其他语言中正在做什么的常见提示是将赋值包装在另一对大括号中,即if ((var = true))
        【解决方案5】:

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

        这里 = 是一个赋值运算符。但是 == 是相等运算符。

        【讨论】:

          猜你喜欢
          • 2020-03-22
          • 2021-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-23
          • 2012-12-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多