将三个数字与Java逻辑三元运算符进行比较?

时间:2012-02-06 23:49:15

标签: java logic ternary-operator

我正在尝试创建一个返回三个值(所有字节)的最小值的方法。这就是我所拥有的:

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 个答案:

答案 0 :(得分:3)

这对三元运营商来说并不是一个错误;这是比较的错误。您的代码说:如果n1> n2,返回n2。因此,在第四示例中,11> 10,所以它返回10。

你必须将n1与n2和n3进行比较才能知道它是最大的还是最低的。你真的想要像

这样的东西
return (n1 <= n2) && (n1 <= n3) ? n1 : (n2 <= n3)? n2 : n3

(注意:未经实际测试)

答案 1 :(得分:1)

这对我有用(为了便于测试,我将它们设为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));
}

答案 2 :(得分:0)

byte min = n1 < n2 ? n1 : n2;
return min < n3 ? min : n3;

答案 3 :(得分:0)

要获得三个数字中的最大值,请使用一行方法:

int min =(a&lt; b&amp;&amp; a&lt; c)? a:((b&lt; a&amp;&amp; b&lt; c)?b:c);

答案 4 :(得分:0)

使用三元运算符查找三个最大数字的代码:

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);
  }
}