两个'如果不做'其他如果'......?

时间:2014-09-05 06:22:42

标签: java android if-statement

所以我在编写循环计数器时碰到了这个......

public void onClick(View view) {

            if(mFactBook.number < mFactBook.mFacts.length){
                mFactBook.number++;
            }

            if(mFactBook.number == mFactBook.mFacts.length){
                mFactBook.number = 0;
            }

            String fact = mFactBook.getFact();
            //Update label with dynamic fact
            factLabel.setText(fact);

            int color = mColorWheel.getColor();
            relativeLayout.setBackgroundColor(color);
            showFactButton.setTextColor(color);

            counter.setText("#" + (mFactBook.number + 1));
        }

所以基本上这样做是贯穿并检查

  1. 是mFactBook.number还不到mFactBook.mFacts.length?如果是,则将mFactBook.number添加1。
  2. 是mFactBook.number等于mFactBook.mFacts.length?如果是,则将mFactBook.number设置为0。
  3. 等...

    但是当组合成if else if语句时......

                if(mFactBook.number < mFactBook.mFacts.length){
                    mFactBook.number++;
                } else if(mFactBook.number == mFactBook.mFacts.length){
                    mFactBook.number = 0;
                }
    

    ...应用程序在达到mFacts的最大长度后,不会将mFactBook.number设置为0。为什么是这样?我很好奇为什么把两个检查点都放在一个if if if if语句不起作用,但有两个单独的检查点确实有效。

7 个答案:

答案 0 :(得分:3)

这是因为您在第一段mFactBook.number块中更改了if的第一段代码。

假设:

mFactBook.number = 0
mFactBook.mFacts.length = 1

然后您的代码执行:

        if(mFactBook.number < mFactBook.mFacts.length){
            mFactBook.number++;
            // mFactBook.number will become 1
        }

然后

        // 1 == 1 is true
        if(mFactBook.number == mFactBook.mFacts.length){
            mFactBook.number = 0;
            // and mFactBook.number will be reset to 0
        }

答案 1 :(得分:2)

您正在修改第一个区块中正在测试的值。

在第一个mFactBook.number++块中完成if递增后,不会执行else块。在第一个代码段中,始终执行if的{​​{1}}次测试。

答案 2 :(得分:2)

似乎你的mFactBook.number到达mFactBook.mFacts.length-1。 它没有达到mFactBook.mFacts.length。 这就是为什么在第一种情况下,当你检查

if(mFactBook.number&lt; mFactBook.mFacts.length){                 mFactBook.number ++;

然后mFactBook.number递增并变为mFactBook.mFacts.length。 所以再次下一个if语句变为true并且设置为0。

在第二种情况下,在递增之后不会再次检查。所以它没有设置为0。 尝试检查为什么mFactBook.number只到达mFactBook.mFacts.length-1。 我希望它能解决你的问题。

答案 3 :(得分:0)

这是因为如果一个语句为真,你有一个if-else if块,它将忽略其余的。而对于if块,系统会检查并比较每个语句。

答案 4 :(得分:0)

如果您的语句为if ... else if时有true阻止,则会忽略其他else if阻止。但是在if块的情况下,检查并比较每个语句。

答案 5 :(得分:0)

boolean androiisGood = true,iOSISGood = true
If(androiisGood){
// do this
}
If(iOSISGood){
// do this
}

在上面的代码中,两个块都将执行

 If(androiisGood){
    // do this
    }
  else If(iOSISGood){
    // do this
    }

仅在上面的代码中如果块将执行,即使两者都为真。我希望这足以让你回答。

答案 6 :(得分:0)

考虑当mFactBook.number == 2和mFactBook.mFacts.length == 3时会发生什么:

       if(mFactBook.number < mFactBook.mFacts.length){
            mFactBook.number++; // mFactBook.number == 3, now they are equal!
        }

        if(mFactBook.number == mFactBook.mFacts.length){ // we check the new value
            mFactBook.number = 0;
        }

因此,如您所见,在两个ifs mFactBook.number++mFactBook.number = 0由两个不同的值控制的情况下,即旧的mFactBook.number和新的mFactBook.number。

在if..else if的情况下,它们都由旧的mFactBook.number控制。因此不同。

PS你可能需要if..else而不是if..else if