2014-09-05 44 views
-3

于是我就到这一点的同时编程循环计数器...两个'如果不做'其他如果'...?

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.mFacts.length mFactBook.number少?如果是,则将1添加到mFactBook.number。
  2. 是mFactBook.number等于mFactBook.mFacts.length?如果是,不是设置mFactBook.number 0

等等

但是当别人如果if语句是如此地结合成一个...

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

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

+2

两个后果'if'条件不等于'else if' – VinayVeluri 2014-09-05 06:23:56

+1

您可以在输入此问题所花费的大约1/4时间内通过调试程序运行此操作。 – 2014-09-05 06:28:06

+0

如果可能,请考虑通过选择最佳答案(如果他们有一个)来考虑关闭其他一些未解决的问题。考虑哪些答案是有用的并且需要赞成。我们需要用户维护他们的问题,以便该网站可以成为有问题的下一个人的有效工具。有关最佳做法的更多细节考虑阅读[提出问题的FAQ(http://stackoverflow.com/faq#howtoask)。 – RossC 2014-09-05 09:27:46

回答

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

谢谢:)我正在努力重构我的代码,而不是思考if-elseif与两个ifs背后的逻辑。 – 2014-09-05 18:49:34

2

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

mFactBook.number++增量在第一个if块中完成后,else块不被采用。在第一个片段中,总是执行测试mFactBook.number == mFactBook.mFacts.length的第二个if

0

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

0

如果你有一个if ... else if块一次的声明是true它会忽略其他else if块。但是在if块的情况下,每个语句都会被检查和比较。

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

在上面的代码块都将执行

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

在上面的代码中仅如果块将甚至均为真执行。我希望这将足以让你回答。

0

考虑当mFactBook.number == 2和mFactBook.mFacts发生什么情况。长度== 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如果,它们都是由老mFactBook.number控制的情况下。因此有所不同。

PS你可能需要的if..else而非的if..else如果

+0

谢谢大家,对于洞察力! :) – 2014-09-05 18:45:45

2

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

如果(mFactBook.number < mFactBook.mFacts.length){ mFactBook.number ++;

然后mFactBook.number递增并且变得mFactBook.mFacts.length。 所以再下一个if语句为真,并设定为0。

在第二种情况下,增加它不检查again.so没有将其设置为0。 尝试查看为什么mFactBook.number只达到直到mFactBook.mFacts.length-1之后。 我希望它能解决你的问题。