2014-09-05 75 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之後。 我希望它能解決你的問題。