Сравнение возрастов. Нужно скорректировать код чтобы он работал с переменными min, max, middle

Основную задачу код делает и делает её правильно, но вот доп. условие я не понимаю куда ввести эти переменные и зачем если код и так нормально работает и выполняет функцию

Напишите код, который будет заполнять эти переменные, сравнивая возрасты между собой. В коде используйте условные операторы if, else и их комбинацию else if, а также при необходимости булевы операторы “И”, “ИЛИ” и “НЕ”

public class Main {
    public static void main(String[] args) {

        int vasyaAge = 77;
        int katyaAge = 60;
        int mishaAge = 44;

        int min = -1; // минимальный возраст
        int middle = -1; // средний возраст
        int max = -1; // максимальный возраст

        System.out.print("Maximal age: ");
        if (vasyaAge >= katyaAge && vasyaAge >= mishaAge) {
            System.out.print(vasyaAge);
        } else {
            if (katyaAge >= vasyaAge && katyaAge >= mishaAge) {
                System.out.print(katyaAge);
            } else {
                System.out.print(mishaAge);
            }
        }

        System.out.println();

        System.out.print("Middle age: ");
        if (vasyaAge <= katyaAge && vasyaAge >= mishaAge||(vasyaAge >= katyaAge && vasyaAge <= mishaAge)) {
            System.out.print(vasyaAge);
        } else {
            if (katyaAge <= vasyaAge && katyaAge >= mishaAge||katyaAge >= vasyaAge && katyaAge <= mishaAge) {
                System.out.print(katyaAge);
            } else {
                System.out.print(mishaAge);
            }
        }

        System.out.println();

        System.out.print("Minimal age: ");
        if (vasyaAge <= katyaAge && vasyaAge <= mishaAge) {
            System.out.print(vasyaAge);
        } else {
            if (katyaAge <= vasyaAge && katyaAge <= mishaAge) {
                System.out.print(katyaAge);
            } else {
                System.out.print(mishaAge);
            }
        }
    }
}

Ответы (1 шт):

Автор решения: Nowhere Man

В приведённом решении совершенно не используются переменные min, middle, max и каждый раз поиск минимума, максимума и среднего значения выполняется заново.

Один из возможных вариантов решения с минимумом сравнений и логических операций -- определить минимум и максимум, а среднее значение взять как разность общей суммы и минимума с максимумом, с использованием подхода, упомянутого в ответе на похожую задачу:

int vasyaAge = 77;
int katyaAge = 60;
int mishaAge = 44;

int min, max;

if (vasyaAge > katyaAge) {
    min = katyaAge;
    max = vasyaAge;
} else {
    min = vasyaAge;
    max = katyaAge;
}

if (mishaAge < min) {
    min = mishaAge;
} else if (mishaAge > max) {
    max = mishaAge;
}

int mid = katyaAge + vasyaAge + mishaAge - min - max;

System.out.println("Maximal age: " + max);
System.out.println("Middle  age: " + mid);
System.out.println("Minimal age: " + min);

Здесь потребуется в худшем случае три сравнения (if) без лишних проверок, вложенных условий и логических операций И / ИЛИ, чтобы определить все три величины.


Альтернативное решение (с "честным" логическим определением среднего значения) может выглядеть следующим образом:

int min, max, mid;

if (vasyaAge > katyaAge) {
    if (vasyaAge > mishaAge) {
        max = vasyaAge;
        if (katyaAge > mishaAge) {
            mid = katyaAge;
            min = mishaAge;
        } else {
            min = katyaAge;
            mid = mishaAge;
        }
    } else { // vasya > katya && vasya < misha
        max = mishaAge;
        mid = vasyaAge;
        min = katyaAge;
    }
} else if (vasyaAge < mishaAge) { // katya > vasya
    min = vasyaAge;
    if (katyaAge < mishaAge) {
        mid = katyaAge;
        max = mishaAge;
    } else { // katya > vasya && katya > misha
        max = katyaAge;
        mid = mishaAge;
    }
} else { // vasya < katya && vasya > misha
    max = katyaAge;
    mid = vasyaAge;
    min = mishaAge;
}
→ Ссылка