3个数字按升序排列,不使用Java中的条件语句。 因为我根本不能使用if语句

到目前为止我的代码看起来像这样:

public class ThreeSort { public static void main(String[] args) { int num1 = Integer.parseInt(args[0]); int num2 = Integer.parseInt(args[1]); int num3 = Integer.parseInt(args[2]); int x = Math.min(num1, num2); int min = Math.min(x,num3); int z = Math.max(num1, num2); int max = Math.max(z, num3); int a = 0; int mid = 0; while (mid >= min && mid <= max) { mid = a; } System.out.println(min); System.out.println(a); System.out.println(max); } 

我知道如何做最小和最大但我遇到了中间问题。 知道如何在没有条件语句的情况下这样做吗?

在这种情况下,有一个简单的算法:

 mid = Math.max(Math.min(num1,num2), Math.min(Math.max(num1,num2),num3)); 

另外,作为运算符^表示按位xor 。 所以另一种方式是:

mid=num1^num2^num3^max^min;

例:

 public static void main(String[] args) { System.out.println(mid(70, 3, 10)); } static int mid(int a, int b, int c) { int mx = Math.max(Math.max(a, b), c); int mn = Math.min(Math.min(a, b), c); int md = a ^ b ^ c ^ mx ^ mn; return md; } 

输出: 10。

同样如下面的 OldCurmudgeon所说,你可以使用以下公式计算mid值:

 int mid = num1 + num2 + num3 - min - max; 

将它们放入List并对其进行排序……

 List ints = new LinkedList<>(); ints.add(Integer.parseInt(args[0])); ints.add(Integer.parseInt(args[1])); ints.add(Integer.parseInt(args[2])); Collections.sort(ints); // smallest -> greatest System.out.println(ints); Collections.reverse(ints); // greatest -> smallest System.out.println(ints); 
 int mid = num1 + num2 + num3 - min - max; 

对不起,简要介绍 – 从我的手机发布。

必须不言自明的是,中间数字是三个数字之和减去最大值减去最小值。 如果max == mid或max == min或甚至两者都可以工作。

假设这是某种拼图/家庭作业你是否允许使用三元运算符?

 int[] ints = {3, 1, 2}; int min = ints[0] <= ints[1] && ints[0] <= ints[2] ? ints[0] : ints[1] <= ints[0] && ints[1] <= ints[2] ? ints[1] : ints[2]; 

这就是我在没有任何if语句或三元运算符的情况下实现three_sort的方法。 您必须根据您选择的语言进行调整。

 def two_sort(a, b): small = int(a < b) * a + int(a >= b) * b large = int(a >= b) * a + int(a < b) * b return small, large def three_sort(a, b, c): a, b = two_sort(a, b) a, c = two_sort(a, c) b, c = two_sort(b, c) return a, b, c 

为了更通用的解决方案:

 from random import randint def two_sort(a, b): small = int(a < b) * a + int(a >= b) * b large = int(a >= b) * a + int(a < b) * b return small, large return li[-1] def n_sort(li): for _ in li: for i, _ in enumerate(li[:-1]): li[i], li[i+1] = two_sort(li[i], li[i+1]) return li N = 10 li = [randint(0, 1000) for _ in range(N)] print(N_Sort(N)(*li)) 
 public class ThreeSort { public static void main(String[] args) { // command-line input int a = Integer.parseInt(args[0]); int b= Integer.parseInt(args[1]); int c = Integer.parseInt(args[2]); // compute the order int max=Math.max(Math.max(a,b),c); int min =Math.min(Math.min(a,b ), c); int middle = a + b + c - max - min; // output in ascending order System.out.println(min+"\n" + middle+ "\n"+ max); } }