Сравнивая три числа с логическим троичным оператором Java? - PullRequest
2 голосов
/ 07 февраля 2012

Я пытаюсь создать метод, который возвращает наименьшее значение из трех значений (все байты).Вот что у меня есть:

public static byte findSmallestOfThree(byte n1, byte n2, byte n3) {
    return n1 > n2 ? n2 : n1 > n3 ? n3 : n1;
}

Теперь проблема в том, что она не всегда работает.

Вот некоторые входы и выходы:

9, 10, 11 -> 9

10, 9, 11 -> 9

10, 11, 9 -> 9

11, 10, 9 -> 10

Как видите, когда я ввел 11, 10, 9 (в таком порядке), в результате я получил 10 (хотя это должно было быть 9).

Что не такс моей логикой?Мне кажется, я что-то напутал с троичными операторами, но я не уверен, что это такое ...

Ответы [ 5 ]

3 голосов
/ 07 февраля 2012

Это не ошибка с троичными операторами;это ошибка со сравнениями.Ваш код говорит: если n1> n2, вернуть n2.Таким образом, в четвертом примере 11> 10, поэтому он возвращает 10.

Вы должны сравнить n1 с n2 и n3, чтобы узнать, что это наибольшее или наименьшееВы действительно хотите что-то вроде

return (n1 <= n2) && (n1 <= n3) ? n1 : (n2 <= n3)? n2 : n3

(примечание: на самом деле не проверено)

1 голос
/ 07 февраля 2012

Это работает для меня (я сделал их int для облегчения тестирования):

public static int findSmallestOfThree(int n1, int n2, int n3) {
    return n1 < n2 ? n1 < n3 ? n1 : n3 : n2 < n3 ? n2 : n3;
}

Если вам важнее удобочитаемость, чем скорость:

public static int findSmallestOfThree(int n1, int n2, int n3) {
    return Math.min(n1, Math.min(n2, n3));
}

Вот простой тестовый код:

public static void main(String[] args) {
    System.out.println(findSmallestOfThree(9, 10, 11));
    System.out.println(findSmallestOfThree(10, 9, 11));
    System.out.println(findSmallestOfThree(10, 11, 9));
    System.out.println(findSmallestOfThree(11, 10, 9));
    System.out.println(findSmallestOfThree(9, 11, 10));
    System.out.println(findSmallestOfThree(11, 9, 10));
}
0 голосов
/ 02 августа 2017

Код для поиска наибольшего из трех чисел с использованием троичного оператора:

public class FindGraterUsingTernaryOperator {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the 3 Numbers to Check the Grater:::");
    int a = sc.nextInt();
    int b = sc.nextInt();
    int c = sc.nextInt();
    int result = c > (a > b ? a : b) ? c : ((a > b) ? a : b);
    System.out.println("Grater Between 3 Numbers Is::" + result);
  }
}
0 голосов
/ 18 августа 2014

Чтобы получить максимальное значение из трех чисел, используйте один метод строки:

int min = (a

0 голосов
/ 07 февраля 2012
byte min = n1 < n2 ? n1 : n2;
return min < n3 ? min : n3;
...