2014-09-03 66 views
0

這是打印出99首瓶裝啤酒的整首歌的代碼。我從書中得到它。我剛剛開始。代碼是正常的,運行良好。只有一個小小的打嗝。當它下降到1瓶時,它第一次說「瓶子」。 if語句似乎對該行或其他內容沒有影響。我的問題是:是什麼原因導致它在第一行中是複數?這個Jave代碼的小缺陷

public class bottle { 
    public static void main(String[] args) { 
     int beerNum = 99; 
     String word = "bottles"; 

     while (beerNum > 0) { 

      if (beerNum == 1) { 
       word = "bottle"; 
      } 

      System.out.println(beerNum + " " + word + " of beer on the wall"); 
      System.out.println(beerNum + " " + word + " of beer"); 
      System.out.println("Take one down."); 
      System.out.println("Pass it around."); 
      beerNum = beerNum - 1; 

      if (beerNum > 0) { 
       System.out.println(beerNum + " " + word + " of beer on the wall."); 
      } else { 
       System.out.println("No more bottles of beer on the wall."); 
      } 
     } 

    } 

} 
+2

在我可以發佈答案之前關閉,但基本上'beerNum'正在檢查*之前*減少,因此'beerNum == 1'爲false時會打印1,因爲'beerNum'爲'2 '。我很清楚這裏有什麼問題,我可以發佈一個答案,投票重新開放。 – dimo414 2014-09-03 18:32:47

+1

想一想BeerNum在達到1時的價值。它將在最後一輪之前進入第二個if-block,並且單詞仍然是瓶子。 – jpw 2014-09-03 18:33:01

+0

考慮這兩個問題:'beerNum'在哪裏更新?何時更新「單詞」?按照邏輯,你會發現發生了什麼 – Barranka 2014-09-03 18:33:32

回答

0

從循環中間的beerNum中減去1。

word沒有設置,直到下一個循環開始。

更明確的幫助(例如,擾流板,直到你想過沒有翻轉):

移動計數檢查進一步向下進入循環。

例如,在第一組陳述之後,但在詩節的最後一行之前。

+0

那麼,我應該將if語句移動到減1行之下嗎? 是的。我之前寫過,在我看到你的最後兩行在擾流箱裏lol – 2014-09-03 18:37:35

+0

我移動了那個塊並修復了這個缺陷。這很有趣,因爲我從一本教科書中得到它,這就是他們如何寫它。他們顯然沒有運行過......我剛剛記得在輸入這個評論時,這本書確實提到了會有缺陷並找到它。如果我想起來,我會努力自己解決它。謝謝,雖然哈哈 – 2014-09-03 20:00:23