Java if语句被忽略

时间:2012-08-28 14:34:47

标签: java android if-statement

我正在创建一个简单的应用程序,用户单击一个按钮,将TextView更改为相应的字符串,但是当我的第一个if语句满足时,它不会继续执行以下if语句。

if (index == 0 && index > -1 && index < 5) {
  one.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      index++;
      text1.setText("1");
    }
  });

这是我的第一个if语句,它将TextView设置为“1”,然后应该添加到整数“index”,这会将索引的值转换为“1”,这应该结束此语句,因为它不再符合条件,这将开始以下if语句。

if (index == 1 && index > -1 && index < 5) {
  one.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      text2.setText("1");
      index++;
    }
  });

现在由于先前的if语句将索引的变量设置为“1”,这个if语句应该开始并且前一个结束,但事实并非如此,即使变量不再符合条件,它不会停止,下一个if语句不会开始。好像if语句被忽略了。

更新

我解决了我的问题,这就是我将代码更改为:

one.setOnClickListener(new View.OnClickListener(){public void onClick(View v){
  if(index == 0){
    text1.setText("1");
    index++;
  }else if(index == 1){
    text2.setText("1");
    index++;
  }else if(index == 2){
    text3.setText("1");
    index++;
  }else if(index == 3){
    text4.setText("1");
    index++;
  }
}});

6 个答案:

答案 0 :(得分:3)

来自你的if语句

if (index == 0 && index > -1 && index < 5)

if (index == 0) 

就够了

与第二个相同..

if (index == 1) 

答案 1 :(得分:3)

这不是if语句的工作方式。当条件变为false时,控制流不会突然离开块并跳转到具有真实条件的其他if块。

答案 2 :(得分:2)

您的问题是您的index++语句位于onClick回调中。因此,在单击按钮之前不会执行此代码。到那时,你的第二个if语句将被执行。换句话说:

您的第一个if语句为true,这会为该按钮添加一个onClick侦听器。你的第二个陈述是假的,这什么都不做。用户单击按钮。现在执行第一个回调中的代码:index增加,文本设置为“1”。就是这样。

[编辑这可能就是你想要的]

one.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if ( index == 0 ) {
            index++;
            text1.setText("1");
        } else if (index == 1 ) {
            text2.setText("1");
            index++;
        }
    }
});

答案 3 :(得分:0)

在索引== 1或索引== 0之后,其他条件的相关性是什么?

答案 4 :(得分:0)

它不起作用的原因是,侦听器可能被添加到“onLoad”方法或类的构造函数中。

由于setOnClickListener被if语句包围,因此仅在语句为true时才设置侦听器。在您的情况下,第一个语句为true,而seccond语句为false。

这意味着只添加了第一个列表器,每次单击该按钮时,都会调用text1.setText("1")

您应该将if语句放在onClickListener中,而不是设置监听器的逻辑。所以下面的代码:

  if (index == 0 && index > -1 && index < 5) {
        one.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                index++;
                text1.setText("1");

            }
        });

应该是

one.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
    if (index == 0) {
      index++;
      // Do stuff
    } else if(index == 1) {
      index++;
      // Do stuff
    }
  });
}

每次用户点击“one”按钮时,都会调用onClick。 在onClick内部计算语句,并执行正确的“Do stuff”。

答案 5 :(得分:0)

另一个可行的解决方案:

if ((index > -1) && (index < 5)) {
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            text2.setText(index.toString());
            index++;
    }
});

- 显然这取决于你需要的逻辑,如果你在index == 0时确实需要另一次出现,你必须改变这种格式:

if (index == 0) {
    //Whatever you want to do here... eg:
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            text2.setText("0");
            index++;
        }
    });
}
else if ((index > -1) && (index < 5)) {
    one.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            text2.setText(index.toString());
            index++;
    }
});