1

我正在尝试使用以下代码在 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新手,所以我可能犯了一个非常明显的错误。

提前谢谢了。

4

5 回答 5

6

暗示:

  • =是赋值运算符。
  • ==是一个相等运算符。
  • 在 if 语句中使用赋值运算符会发生什么?
  • 在 if 语句中使用相等运算符时会发生什么?
于 2013-04-09T13:05:02.863 回答
4

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
 }
于 2013-04-09T13:06:10.687 回答
3

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

if(bool = true){...}

if(true){...}

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

于 2013-04-09T13:05:50.580 回答
2

将其更改 if (first = true){ if (first == true) {

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

于 2013-04-09T13:04:55.583 回答
1

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

IE

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
    }
}
于 2013-04-09T13:06:02.163 回答