2016-10-13 2 views
1

Я новичок в Java и, пытаясь сделать некоторые тривиальные вещи и упражнения, я пришел с этим ударом, хотя, я хочу, чтобы слово «утки» было сингулярным, когда выход достигает 1 или 0, вот мой код:Оператор if внутри цикла for в Java

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 маленькая утка вышла в один прекрасный день, за холмы и далеко, мать утка заявила, что шарлатан, шарлатан, шарлатан, шарлатан b ут только 0 маленькая утка вернулся

Обратите внимание на «1 маленьких уток» по-прежнему в форме множественного числа, тогда как нижняя линия уже в особой форме .. спасибо, ребята ..

+4

Это потому, что вы выходите из «утки -1», но проверяете «утку». Так. у уток = 2, вы получаете множественное число, но затем выводят утку-1, которая является единственной. Поскольку у вас есть ДВЕ места, где счет утки выводится, и у них разные значения, вам понадобятся две строки утки/утки. –

ответ

2

Каждая итерация цикла гравюр две строки - один с токовым счетчиком duck и один с duck-1. Однако вы назначаете значение word на основе duck, поэтому, когда 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

Ничего себе! спасибо, человек, который сделал это отлично .. Я держал его как можно более компактным и лаконичным, поэтому я не использовал цикл while, как 99 бутылок пива упражнение использовало .. спасибо снова человеку .. – DuckStudyingJava

Смежные вопросы