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

标签 java

我已经尝试了一切,但我无法让这段代码按从大到小的顺序打印 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);
    }
}

最佳答案

还有罗马格拉夫的回答 您需要将其包含在文档顶部

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

上面是一个递归交换函数,基本上只是从头开始,然后检查数组中的下一个数字是否更大或更小,如果小于,则交换两个数字并重新开始,否则继续前进下一个数字。

[编辑] java 代码替换为经过测试的版本。

关于java - 尝试编写一个代码,在不使用循环的情况下从最大到最小打印五个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207814/

相关文章:

java - 将FileInputStream和FileOutputStream传给ffmpeg进行转码(使用JAVE-Java音视频编码)

java - 适用于 Java 的优秀且有效的 CSV/TSV 阅读器

Java web.xml <servlet-class> 标签和 web.xml 规范/文档

java - 如何在更多 HTTP 请求中缓存 Spring MVC Web 应用程序中的数据?

java - 如何编写不等于特定枚举值的匹配器?

java - 将字符与字符串分开?

java - 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

运行appium脚本时出现java.lang.ClassNotFoundException

java - 关闭时是否存在现有的 FileInputStream 删除?

java - Powermock : Mocked method still called