尝试编写一段代码,在不使用循环的情况下,从最大到最小打印五个数字



我已经尝试了一切,但我不能得到这个代码打印5个数字从最大到最小的顺序。任何帮助将不胜感激。java网站告诉我要多写一些,所以我就开始写了。我会使用循环来实现这一点,但任务要求不使用循环。我有麻烦打印出这5个数字从最大到最小不使用循环。请帮忙

import java.util.Scanner;
public class InOrder{
    public static void main(String[] args){ 
        Scanner input = new Scanner(System.in);
        int hi=0;
        int hi2=0;
        int mid=0;
        int low=0;
        int low2=0;
        System.out.println("Enter 5 variables:");
        int num1 = input.nextInt();
        int num2 = input.nextInt();
        int num3 = input.nextInt();
        int num4 = input.nextInt();
        int num5 = input.nextInt();
        //Finds the highest number
        if ((num1 >= num2) && (num1 >= num3) && (num1 >= num4) && (num1 >= num5)) {
            hi = num1;
        } else if ((num2 >= num1) && (num2 >= num3) && (num2 >= num4) && (num2 >= num5)) {
            hi = num2;
        } else if ((num3 >= num1) && (num3 >= num2) && (num3 >= num4) && (num3 >=  num5)) {
            hi = num3;
        } else if ((num4 >= num1) && (num4 >= num2) && (num4 >= num3) && (num4 >= num5)) {
            hi = num4;
        } else if ((num5 >= num1) && (num5 >= num2) && (num5 >= num3) && (num5 >= num4)) {
            hi = num5;
        }
        // Finds Second Highest
        if ((num1 > mid) && (num1 > low) && (num1 > low2) && (num1 < hi)) {
            hi2 = num1;
        } else if ((num2 > mid) && (num2 > low) && (num2 > low2) && (num2 < hi)) {
            hi2 = num2;
        } else if ((num3 > mid) && (num3 > low) && (num3 > low2) && (num3 < hi)) {
            hi2 = num3;
        } else if ((num4 > mid) && (num4 > low) && (num4 > low2) && (num4 < hi)) {
            hi2 = num4;
        } else if ((num5 > mid) && (num5 > low) && (num5 > low2) && (num5 < hi)) {
            hi2 = num5;
        }
        //Finds the middle number
        if ((num1 < hi) && (num1 < hi2) && (num1 > low2) && (num1 > low)) {
            mid = num1;
        } else if ((num2 < hi) && (num2 < hi2) && (num2 > low2) && (num2 > low)) {
            mid = num2;
        } else if ((num3 < hi) && (num3 < hi2) && (num3 > low2) && (num3 > low)) {
            mid = num3;
        } else if ((num4 < hi) && (num4 < hi2) && (num4 > low2) && (num4 > low)) {
            mid = num4;
        } else if ((num5 < hi) && (num5 < hi2) && (num5 > low2) && (num5 > low)) {
            mid = num5;
        }
        //Finds the lowest number
        if ((num1 <= num2) && (num1 <= num3) && (num1 <= num4) && (num1 <= num5)) {
            low = num1;
        } else if ((num2 <= num1) && (num2 <= num3) && (num2 <= num4) && (num2 <=  num5)) {
            low = num2;
        } else if ((num3 <= num1) && (num3 <= num2) && (num3 <= num4) && (num3 <= num5)) {
            low = num3;
        } else if ((num4 <= num1) && (num4 <= num2) && (num4 <= num3) && (num4 <= num5)) {
            low = num4;
        } else if ((num5 <= num1) && (num5 <= num2) && (num5 <= num3) && (num5 <= num4)) {
            low = num5;
        }
        //Finds Second Lowest
        if ((num1 < mid) && (num1 > low) && (num1 < hi2) && (num1 < hi)) {
            low2 = num1;
        } else if ((num2 < mid) && (num2 > low) && (num2 < hi2) && (num2 < hi)) {
            low2 = num2;
        } else if ((num3 < mid) && (num3 > low) && (num3 < hi2) && (num3 < hi)) {
            low2 = num3;
        } else if ((num4 < mid) && (num4 > low) && (num4 < hi2) && (num4 < hi)) {
            low2 = num4;
        } else if ((num5 < mid) && (num5 > low) && (num5 < hi2) && (num5 < hi)) {
            low2 = num5;
        }
        System.out.println("The variables from greatest to least are:");
        System.out.print("" + hi);
        System.out.print("," + hi2);
        System.out.print("," + mid);
        System.out.print("," + low2);
        System.out.print("," + low);
    }
}

还有Roman Graf的回答你需要把它包含在文档的顶部

import java.util.Arrays;

试着这样做:

    public class NoLoopSort {
        static int[] values = new int[] { 4, 2, 5, 1, 3 };
        public static void main(String[] args) {
            printLower(0, values.length - 1);
            printLower(0, values.length - 1);
            printLower(0, values.length - 1);
            printLower(0, values.length - 1);
            printLower(0, values.length - 1);
        }
        private static void printLower(int start, int end) {
            if (start == end) {
                // this is currently the lowest number in array, print it.
                System.out.println(values[start]);
                // make current index biggest possible
                values[start] = Integer.MAX_VALUE; 
            } else {
                if (values[start] < values[end]) {
                    printLower(start, end - 1);
                } else if (values[start] >= values[end]) {
                    printLower(start + 1, end);
                }
            }
        }
    }

上面是一个递归交换函数,基本上就是从开始开始,然后检查数组中的下一个数字是大还是小,如果小于,则交换两个数字并重新开始,否则移动到下一个数字。

[edit] java代码替换为测试版本

你不想使用循环?

System.out.println(Arrays.sort(new int[]{num1,num2,num3,num4,num5}));

有点不诚实。您可以创建一个数组,并使用api对该数组进行排序。还是禁止调用使用循环的函数?

相关内容

最新更新