当前位置: 首页 > 知识库问答 >
问题:

不使用数组按降序排列数字[重复]

慎俊艾
2023-03-14

我想在不使用数组的情况下按降序排列数字。当我使用字符串时,它给出了运行时错误。例如:

Input: 2436
Output: 6432

这是我写的,但问题是第一个数字没有打印出来,这不是预期的输出。

public static void main (String[] args) throws java.lang.Exception {
    Scanner sc = new Scanner(System.in);
    int num,n,r=0,FinalNo=0;
    System.out.println("Enter any number");
    num=sc.nextInt();
    n=num;
    while(n>0) {
        r=n%10;
        n=n/10;
        FinalNo=(FinalNo*10)+r;
    }
    System.out.println("The number in descending order is "+FinalNo);
}   

共有2个答案

狄宾实
2023-03-14

您的示例反转输入的值,但不按降序对其进行排序。你不允许使用字符串或数组(学校作业?),但是列表呢?

List<Integer> ints = new LinkedList<>(); // Because ArrayList uses an array internally
while (n > 0) {
    ints.add(n % 10);
    n = n / 10;
}
ints.sort((a, b) -> Integer.compare(b, a)); // Sort in reverse order
System.out.print("The digits in reversed order are: ");
ints.forEach(System.out::print);
System.out.println();
韩捷
2023-03-14

假设您的数字不大于Integer.MAX_VALUE,您可以使用ReSort算法。它可以很好地处理O(n)的复杂性。在这里,您可以在以下代码中找到解决方案,该代码不使用任何数组或列表和字符串。

public static void main(String[] args) {
        int number = 45322;
        int sortedNumber = 0;

    /*
     * This loop checks for each digit starting from 9 to 0. 
     * In case of ascending order it should be 0 to 9.
     */
    for (int i = 9; i >= 0; i--) {
        int tmpNumber = number;
        while (tmpNumber > 0) {
            int digit = tmpNumber % 10;
            // Check for the greatest digit in the given number
            if (digit == i) {
                sortedNumber *= 10;
                sortedNumber += digit;
            }
            tmpNumber /= 10;
        }
    }
    System.out.println(sortedNumber); // prints 54322.
}

我想这对你应该有用。

 类似资料:
  • 问题内容: 以下代码将按 升序 对数组进行排序: 我需要 按降序 排序。如何使用比较器执行此操作? 请帮忙。 问题答案: 对于原始数组类型,您必须编写一个反向排序算法: 或者,您可以将转换为并编写比较器: 或使用,因为它仅适用于非原始数组类型。 最后,

  • 我试图实现对存储在列表中的对象字段值的排序。 我找到了下面的解决方案来比较字符串,但是我如何比较字符串值并相应地排序? 我想先排序"Y"状态值然后"N"

  • 我很惊讶以前没有人问过这个特定的问题,但我真的没有在SO上或。 假设我有一个包含整数的随机numpy数组,例如: 但我希望解决方案按降序排序。 现在,我知道我总能做到: 但这最后一句话是否高效?它不创建一个按升序排列的副本,然后反转这个副本以得到按反转顺序排列的结果吗?如果情况确实如此,是否有一个有效的替代方案?看起来不像接受参数来更改排序操作中比较的符号,以获得相反的顺序。

  • 问题内容: 如何在如下所示的SQLAlchemy查询中使用ORDER BY ? 此查询有效,但以升序返回: 如果我尝试: 然后我得到:。 问题答案: 来自@ jpmc26的用法

  • 问题内容: 有没有什么简便的方法可以按降序对数组进行排序,就像它们在Arrays类中如何按升序排序? 问题答案: 你可以使用它对所有对象进行排序 不能直接用于降序对原始数组进行排序。如果尝试Arrays.sort()通过传递由定义的反向 来调用该方法,则会抛出错误 找不到适合sort(int [],comparator)的方法 可以与“对象数组”(例如整数数组)一起使用,但不能与基本数组(例如整数

  • 我在学校的任务是创建一个程序,以升序排列数组的值。它几乎就在那里,但每当我输入“44 55 66 22 33 11 77 99 88 66”或它输出的任何数字 -858993460,11,22,33,44,55,66,66,77,88,或开头为负数 第一个数字到底怎么了?我是不是缺了什么? 我对C++很陌生,我不太明白这里的问题。如果有什么建议我可以用请告诉他们。 }