Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Как отсортировать 3 элемента?

#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; List ages = 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.

Комментариев нет:

Отправить комментарий