Java 按降序排序

Java 按降序排序,java,Java,如何只选择整数并按降序排序,然后将其放置在保留其他字符位置不变的位置 我试过了 for ( i = 0; i < num.length - 1; i ++ ) { for ( j = i + 1; j < num.length; j ++ ) { if( i < j ) //sorting into descending order

如何只选择整数并按降序排序,然后将其放置在保留其他字符位置不变的位置

我试过了

for ( i = 0; i < num.length - 1; i ++ )  
         {
              for ( j = i + 1; j < num.length; j ++ )
              {
                   if( i < j )         //sorting into descending order
                   {
                           temp = num[ i ];   //swapping
                           num[ i ] = num[ j ];
                           num[ j ] = temp; 
                    }           
              }System.out.print(temp+",");
for(i=0;i
我希望输入为f,2,3,a,9,5,输出为f,9,5,a,3,2。一种简单的方法(虽然不是最快的)是只取出数字,对它们进行排序,然后将它们放回数组中

这允许您使用Java内置的排序方法,这使读者清楚地知道您在做什么:

public static void main(String[] args) {
    char[] arr = { 'f', '2', '3', 'a', '9', '5' };

    List<Character> onlyNumbers = new ArrayList<>();
    for (int i = 0; i < arr.length; i++) {
        if (Character.isDigit(arr[i])) {
            // if this position contains a digit, add it to our list
            onlyNumbers.add(arr[i]);
        }
    }

    // sort using the reverse of the natural ordering
    Collections.sort(onlyNumbers, Collections.reverseOrder());

    for (int i=0; i< arr.length; i++) {
        if (Character.isDigit(arr[i])) {
            // if this position contains a digit,
            // replace it with the highest remaining digit
            arr[i] = onlyNumbers.remove(0);
        }           
    }

    System.out.println(Arrays.toString(arr));  // [f, 9, 5, a, 3, 2]
}
publicstaticvoidmain(字符串[]args){
char[]arr={'f','2','3','a','9','5'};
仅列出编号=新建ArrayList();
对于(int i=0;i

此解决方案优先考虑可读性而不是速度。实施一种对数字进行适当排序的方法会更快,但除非您处理的是大数据集,否则这应该足够快。

您可以使用现有方法的大部分。
删除
if(i
通过检查数字进行检查,如果它们是顺序错误的数字,则交换它们:

    char num [] = { 'f','2','3','a','9','5'};

    System.out.println(num);
    for ( int i = 0; i < num.length - 1; i ++ )  
    {
         for (int j = i + 1; j < num.length; j ++ )
         {
             if(   Character.isDigit(num[i]) 
                && Character.isDigit(num[j])  
                && num[i] < num[j])  {
                 char temp = num[ i ];   //swapping
                 num[ i ] = num[ j ];
                 num[ j ] = temp;
             }
         }           
    }
    System.out.println(num);//Prints f95a32
charnum[]={'f','2','3','a','9','5'};
系统输出打印项数(num);
for(int i=0;i
编辑
如果您需要使用大于数字的数字,
您可以使用字符串对象数组而不是字符数组。您可以使用Integer.parseInt.Integer.parseInt来代替Character.isDigit。如果字符串不是整数,则Integer.parseInt将引发NumberFormatException,因此您必须将异常处理为无交换情况。

我们应该猜测
num
是字符数组?什么是
num
?根据定义,您意识到,
i
还有其他简单的方法吗?您的思路是正确的。您希望比较
i
j
处的值,而不是直接比较
i
j
处的值。此外,您需要检查
i
j
处的值是否为字符并跳过过程如果是的话。我该怎么做呢?我对java还不熟悉。但是如果我需要添加100,a,,#,45,4作为输入呢?我会在我的答案中添加一条注释。