2014-09-03 34 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