所以我在编写循环计数器时碰到了这个......
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));
}
所以基本上这样做是贯穿并检查
等...
但是当组合成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语句不起作用,但有两个单独的检查点确实有效。
答案 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