Задача
Дано три различных числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]. Вывести среднее из них.
Условие задачи на e-olymp.
Входные данные
Числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] — целые и по модулю не превышают 1000.
Выходные данные
Единственное число — ответ на задачу.
Тесты
№ | a | b | c | Результат |
1 | 5 | 7 | 9 | 7 |
2 | 7 | 5 | 9 | 7 |
3 | 9 | 7 | 5 | 7 |
4 | 7 | 9 | 5 | 7 |
5 | 5 | 9 | 7 | 7 |
6 | 9 | 5 | 7 | 7 |
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class SecondLab { public static void main (String[] args) throws java.lang.Exception { int a, b, c, average; Scanner input = new Scanner(System.in); a = input.nextInt(); b = input.nextInt(); c = input.nextInt(); if((a > b && b > c)||(c > b && b > a)) average = b; else if ((b > a && a > c)||(c > a && a > b )) average = a; else average = c; System.out.println(average); } } |
Пояснения
В первом условии if((a > b && b > c)||(c > b && b > a)) , мы проверяем оба условия при которых при выполнении любого из них средним числом будет второе число. В следующем условии else if ((b > a && a > c)||(c > a && a > b )) , проделываем точно такую же операцию, только уже с первым числом. Если же два предыдущих условных оператора не выполняются, то результат будет таков, что средним числом будет являться третье число.
Нужно попытаться провести рефакторинг. Из трёх различных чисел средним может оказаться только одно. Значит у нас три варианта развития событий. Это означает, что в коде должно быть два условных оператора. Вы использовали 5. Т.е. каждый участок кода, ответственный за обработку варианта повторяется дважды. Если обработку потребуется в дальнейшем как-то менять, то нужно не забыть в трёх парах мест написать строго одно и тоже. Программисты такие штучки не любят.
Правильно было бы при помощи if - else if - else разобраться с тремя вариантами и записать результат в некоторую результирующую переменную. Потом один раз выполнить обработку найденного значения.
Рефакторинг программы был произведен. Игорь Евгеньевич, перепроверьте пожалуйста.
Оперативно. молодец. Зачтено.