2016-10-13 282 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