Сравнение возрастов. Нужно скорректировать код чтобы он работал с переменными 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 шт):
В приведённом решении совершенно не используются переменные 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;
}