2016-10-13 241 views
1

我是Java新手,尝试做一些简单的事情和练习,虽然我碰到了这个凹凸,但是当输出达到1时,我希望单词“ducks”是单数,或者0,这里是我的代码:如果语句在Java for循环中

public class FiveLittleDucks { 

    public static void main(String[] args) { 

     String word = ""; 

     System.out.println("The story of the 5 little ducks"); 
     for(int duck = 5 ; duck>0 ; duck--) { 
      if(duck == 1 || duck == 0) { 
       word = "duck"; 
      } else { 
       word = "ducks"; 
      } 
      System.out.printf("%d little %s went out one day, over the hills and far away, mother duck said quack, quack, quack, quack", duck, word); 
      System.out.printf(" but only %d little %s went back\n", duck-1, word); 
     } 
    } 
} 

这里是输出: 的5只小鸭子

5只小鸭子出去的一天,在山上和远的故事,母亲鸭子说庸医,庸医,庸医,庸医,但只有4只小鸭回去了

4小杜母亲有一天出去了,在山上和远处,母鸭说嘎嘎,嘎嘎,嘎嘎,嘎嘎,但只有3只小鸭回去了

3只小鸭子出去了一天,在山上和远处,母亲鸭子说呱,呱,呱,呱,但只有2只小鸭子回去

2只小鸭子1天出去,在山上和远,鸭妈妈说呱,呱,呱,呱,但只有1小鸭子回去了

有一天小鸭子出去了,越过山头和远处,母鸭说嘎嘎,嘎嘎,嘎嘎,嘎嘎b UT只有0的小鸭子回去

通知“1只小鸭子”还是复数形式,而底线已经是单数形式..感谢家伙..

+4

这是因为你正在压倒'鸭-1',但测试了'鸭'。所以。在鸭子= 2时,你得到复数,但是输出duck-1,这是单数。既然你有两个地方输出鸭子的数量,他们有不同的值,你需要两个鸭子/鸭子字符串。 –

回答

2

循环打印两行的每次迭代 - 一个与duck的当前计数器和一个与duck-1。然而,在设定基于duck一个价值word,所以当duck是2字为"ducks",即使duck-1为1。一种方法来解决,这是提取自循环字的计算和单独评价它:

public static void main(String[] args) { 
    System.out.println("The story of the 5 little ducks"); 
    for(int duck = 5 ; duck>0 ; duck--) { 
     System.out.printf("%d little %s went out one day, over the hills and far away, mother duck said quack, quack, quack, quack", duck, ducksToWord(duck)); 
     System.out.printf(" but only %d little %s went back\n", duck-1, ducksToWord(duck-1)); 
    } 
} 

private static String ducksToWord(int duck) { 
    if (duck == 1 || duck == 0) { 
     return "duck"; 
    } 
    return "ducks"; 
} 
+1

哇!谢天谢地,这样做完美无瑕..我尽量保持它的简洁和简洁,这就是为什么我没有使用像99瓶啤酒运动时使用的while循环。再次感谢man .. – DuckStudyingJava