Как найти среднее (медиану) из трёх чисел?

452
31 августа 2017, 18:28

Имеется три числа: 10, 20, 30. Как найти среднее из них (не самое большое и не самое маленькое), без множества условий?

Answer 1

Отсортировать и взять среднее.

public static void main(String[] args) {
    int[] numbers = new int[] {31, 6, 13};
    Arrays.sort(numbers);
    System.out.println(numbers[1]);
}
Answer 2
int max = Math.max(Math.max(a,b), c);
int min = Math.min(Math.min(a,b), c);
int mid = a + b + c - (min + max);
Answer 3

Можно через условие тернарными операторами

int mid =  (a > b)? ((c<b)?b:((c<a)?c:a)): ( (a>c)?a:(b>c)?c:b);
Answer 4

Держи ещё вариант с одним ифом, а не несколькими:

private int middleOfThree(int[] input) {
    int x = Math.max(input[0], input[1]);
    int y = Math.max(input[0], input[2]);
    if (x == y) {
        return Math.max(input[1], input[2]);
    } else {
        return Math.min(x, y);
    }
}
Answer 5
import static java.lang.Math.*;

int[] digits = {20, 10, 30};
System.out.println(max(max(min(digits[0], digits[1]), min(digits[1], digits[2])), min(digits[0], digits[2])));
Answer 6

Вам в любом случае придется использовать условия - пусть даже внешне они будут скрыты в вызовах готовых методов для сортировки (Collections.sort, Arrays.sort и т.п.) или получения мин./макс. значений (Math.min, Math.max и т.п.). Лучше написать простенькую функцию с парой условий - это гарантированно будет работать быстрее.

private static int getMed(int a, int b, int c) {
    return (a >= b && a <= c) || (a <= b && a >= c) ? a : ((b >= a && b <= c) || (b <= a && b >= c) ? b : c);
}
Answer 7

Решение, используя сеть сортировки, построенной на основе метода пузырьков, из ответа @Gyorgy Szekely:

int median = Math.max(Math.min(a, b), Math.min(Math.max(a, b), c));

Полный пример:

public class MedianOf3 {
  public static void main(String[] argv) {
      System.out.println(median(10, 20, 30));
  }
  public static int median(int a, int b, int c) {
      return Math.max(Math.min(a, b), Math.min(Math.max(a, b), c));
  }
}

Вывод:

20

См. Fastest way of finding the middle value of a triple?

READ ALSO
Как добавить обфуксацию кода?

Как добавить обфуксацию кода?

Проект имеет следующие строки в buildgradle modulelvl:

364
MS SQL Обновление данных в базе - Java БД

MS SQL Обновление данных в базе - Java БД

Подскажите, где может быть ошибкаЗдесь происходит вставка данных и обновление, вставка работает при обновлении возникает ошибка: Exception in thread...

436
Web приложение для поиска файлов

Web приложение для поиска файлов

Есть класс Findjava для поиска всех файлов в папках и подпапках

274
Смена версии java в intellij idea

Смена версии java в intellij idea

Как можно сменить версию Java в IDEA?

355