#java
Недавно начал учить Java и в качестве практической задачи нужно написать приложение, которое должна сравнивать 3 возраста и выдавать результат, кто самый старший, младший и между ними. Так же была дана "методичка" в которой изложена суть логики всего этого. Но или я дурак, или лыжи не едут, но именно такое решение задачи мне просто не дается. Я просто путаюсь что с чем уже сравнивал и не могу двинуться дальше. Я не прошу решения этой задачи, просто подскажите - какие еще варианты решения этой задачи можно использовать ? Метод решения, на котором настаивает учитель мне не подходит. public class Loader { public static void main(String[] args) { Integer damirAge = 30; Integer tolanAge = 25; Integer uraAge = 55; Integer oldest; Integer youngest; Integer middle; if (damirAge >= tolanAge && damirAge >= uraAge) oldest = damirAge; else if (tolanAge >= damirAge && tolanAge >= uraAge) oldest = tolanAge; else oldest = uraAge; if (damirAge <= tolanAge && damirAge <= uraAge) youngest = damirAge; else if (tolanAge <= damirAge && tolanAge <= uraAge) youngest = tolanAge; else youngest = uraAge; if (damirAge >= tolanAge && damirAge <= uraAge) middle = damirAge; else if (tolanAge >= uraAge && tolanAge <= damirAge) middle = tolanAge; else middle = uraAge; System.out.println("Most young " + youngest); System.out.println("Middle " + middle); System.out.println("Most old " + oldest); } }
Ответы
Ответ 1
Думаю, что задание предполагало всё-таки освоение логики вложенных операторов if. По анализу математической подоплёки: Возможных результатов (перестановок) может быть 6 (если не учитывать случаи равенства). На получение 6 исходов нужно по меньшей мере 2.58 бита информации, т.е. эта задача требует в идеале выполнения не более трёх сравнений. Это в данном случае реализуемо - сравнений будет 2 или 3 (в среднем 2.667): if A > B: if A > C: if B > C: A B C else: A C B else: C A B else: if B > C: if C > A: B C A else: B A C else: C B AОтвет 2
Такое странное решение, подходящее для случая именно трёх возрастов: public static void main(String[] args) { Integer damirAge = 30; Integer tolanAge = 25; Integer uraAge = 55; Integer oldest = Math.max(Math.max(damirAge, tolanAge), uraAge); Integer youngest = Math.min(Math.min(damirAge, tolanAge), uraAge); Integer middle = (damirAge + tolanAge + uraAge) - oldest - youngest; System.out.println("Most young " + youngest ); System.out.println("Middle " + middle); System.out.println("Most old " + oldest); } Поскольку внутри Math.max/min по сути своей является условным выражением, это решение можно передалать под вашу задачу с if/else: public static void main(String[] args) { Integer damirAge = 30; Integer tolanAge = 25; Integer uraAge = 55; Integer oldest; Integer youngest; Integer middle; if(damirAge > tolanAge){ oldest = damirAge; } else { oldest = tolanAge; } if(uraAge > oldest){ oldest = uraAge; } if(damirAge < tolanAge){ youngest = damirAge; } else { youngest = tolanAge; } if(uraAge < youngest){ youngest = uraAge; } middle = (damirAge + tolanAge + uraAge) - oldest - youngest; System.out.println("Most young " + youngest ); System.out.println("Middle " + middle); System.out.println("Most old " + oldest); } Но делать нужно конечно через массивы, как ответил @gil9red, на мой взгляд в качестве учебного задания на if/else можно подобрать гораздо более уместные примеры, чем этот.Ответ 3
просто подскажите - какие еще варианты решения этой задачи можно использовать Условия нужны, но в этой задаче, мне кажется, проще будет другой подход: Получаем 3 возраста Помещаем их в коллекцию, например в список Сортируем список После сортировки, первым элементом будет самый младший, потом средний и последним старший Код: Integer damirAge = 30; Integer tolanAge = 25; Integer uraAge = 55; Listages = Arrays.asList(damirAge, tolanAge, uraAge); System.out.println(ages); // [30, 25, 55] // Сортируем Collections.sort(ages); System.out.println(ages); // [25, 30, 55] Integer youngest = ages.get(0); Integer middle = ages.get(1); Integer oldest = ages.get(2); System.out.println("Most young " + youngest); System.out.println("Middle " + middle); System.out.println("Most old " + oldest); Результат: Most young 25 Middle 30 Most old 55 Ответ 4
Integer damirAge = 30; Integer tolanAge = 25; Integer uraAge = 55; Integer oldest; Integer youngest; Integer middle; if (damirAge >= tolanAge && damirAge >= uraAge){ oldest = damirAge; if (tolanAge >= uraAge){ middle = tolanAge; youngest = uraAge; }else{ middle = uraAge; youngest = tolanAge; } } else if (tolanAge >= damirAge && tolanAge >= uraAge){ oldest = tolanAge; if (damirAge >= uraAge){ middle = damirAge; youngest = uraAge; }else{ middle = uraAge; youngest = damirAge; } }else{ oldest = uraAge; if (damirAge >= tolanAge){ middle = damirAge; youngest = tolanAge; }else{ middle = tolanAge; youngest = damirAge; } } Справедливости стоит добавить что данный алгоритм отработает быстрее чем вариант с сортировкой списка, просто потому что не будем выделять место для списка. В лучшем случае проведем 3 сравнения Integer, в худшем- 5, мат. ожидание примерно равно 4.
Комментариев нет:
Отправить комментарий