Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中按逆字母顺序对字符串数组排序_Java - Fatal编程技术网

在Java中按逆字母顺序对字符串数组排序

在Java中按逆字母顺序对字符串数组排序,java,Java,我的任务是将此代码转换为反向排序,但我一辈子都不知道该怎么做。这些是我的排序、FindLarge和swap方法。我有一种感觉,我在这里错过了一些显而易见的东西,任何帮助都将不胜感激 public static void sort(String[] arr) { for (int pass = 1; pass < arr.length; pass++) { int largestPos = findLargest(arr

我的任务是将此代码转换为反向排序,但我一辈子都不知道该怎么做。这些是我的排序、FindLarge和swap方法。我有一种感觉,我在这里错过了一些显而易见的东西,任何帮助都将不胜感激

    public static void sort(String[] arr)
    {
        for (int pass = 1; pass < arr.length; pass++)
        {
            int largestPos = findLargest(arr, arr.length - pass);
            if (largestPos != arr.length - pass)
            {
                swap(arr, largestPos, arr.length - pass);
            }
        }
    }

    public static int findLargest(String[] arr, int num)
    {
        int largestPos = 0;
        for (int i = 1; i <= num; i++)
        {
            if (arr[i].compareToIgnoreCase(arr[largestPos]) > 0)
            {
                largestPos = i;
            }
        }
        return largestPos;
    }

    public static void swap(String[] arr, int first, int second)
    {
        String temp = arr[first];
        arr[first] = arr[second];
        arr[second] = temp;
    }
}
公共静态无效排序(字符串[]arr)
{
对于(int pass=1;pass
您可以使用
数组.排序(arr)
按字母顺序排序


然后把它倒过来

你能把findLargest转到findsmalest吗,就像这样:

public static void sort(String[] arr) {
    for (int pass = 1; pass < arr.length; pass++) {
        int largestPos = findSmallest(arr, arr.length - pass);
        if (largestPos != arr.length - pass) {
            swap(arr, largestPos, arr.length - pass);
        }
    }
}

public static int findSmallest(String[] arr, int num) {
    int largestPos = 0;
    for (int i = 1; i <= num; i++) {
        if (arr[i].compareToIgnoreCase(arr[largestPos]) < 0) {
            largestPos = i;
        }
    }
    return largestPos;
}

public static void swap(String[] arr, int first, int second) {
    String temp = arr[first];
    arr[first] = arr[second];
    arr[second] = temp;
}
公共静态无效排序(字符串[]arr){
对于(int pass=1;passpublicstaticvoidsort(String[]arr){
数组。排序(arr);

for(inti=0;i,只是
Arrays.sort(arr,Collections.reverseOrder());

我认为这是您需要的(如果您不考虑集合框架的话)


不要重新发明轮子-

String[] strs = {"a", "b", "d", "c", "e"};

Arrays.sort(strs, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));

System.out.println(Arrays.toString(strs));
[e、d、c、b、a]
A.R.S.答复的后续行动:

如果允许使用Arrays.Sort方法,则可以使用自定义比较器

Arrays.sort(stringArray, new Comparator<String>() {
            @Override
            public int compare(String t, String t1) {
                return -t.compareToIgnoreCase(t1); //reverse the comparison, while ignoring case
            }
        });
Arrays.sort(stringArray,new Comparator(){
@凌驾
公共整数比较(字符串t、字符串t1){
return-t.compareToIgnoreCase(t1);//在忽略大小写的情况下反转比较
}
});

因此,首先我们需要创建字符串数组,然后使用
数组。sort(String[]);
,然后使用
for
将数组的排序倒序

import java.util.Arrays;

public class SortClass {
    public static void main(String[] args) {
        String[] arrayString = new String[5];
        arrayString[0] = "Cat";
        arrayString[1] = "Apple";
        arrayString[2] = "Dog";
        arrayString[3] = "Mouse";
        arrayString[4] = "kitchen";
        Arrays.sort(arrayString);
        String[] arrReverse = new String[arrayString.length];
        for (int i = arrayString.length - 1; i >= 0; i--) {
            arrReverse[arrayString.length - 1 - i] = arrayString[i];

        }
    }
}
String arr[]=新字符串[];
字符串s;//输入字符串
整数计数=0;
对于(int i=0;i0){
int j=0;
while(j0)){
字符串温度=arr[i];
arr[i]=arr[j];
arr[j]=温度;
}
j++;
} 
i++;
计数--;
}

对于(i=0;i允许使用集合和ArrayList吗?只是一个小注释:Java中的数组以索引0开始,而不是1。@str OP不必检查
arr[0]>arr[0]
;在索引1开始检查是可以的。(这与任务相反)。使用两个参数Arrays.sort和pass
Collections.reverseOrder()
作为比较器。这似乎是最优雅的,但我注意到代码希望比较忽略大小写的字符串。因此,您需要一个自定义比较器,而不是Collections.reverseOrder()。@bowmore您可以使用
Collections.reverseOrder(String.case\u Responsible\u ORDER)
为此,无需实现自定义子字符串。这用于从给定字符串生成子字符串,然后按降序对它们进行排序,以便可以更改循环以获得自己的子字符串
cbc
bac
abc
String[] strs = {"a", "b", "d", "c", "e"};

Arrays.sort(strs, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));

System.out.println(Arrays.toString(strs));
[e, d, c, b, a]
Arrays.sort(stringArray, new Comparator<String>() {
            @Override
            public int compare(String t, String t1) {
                return -t.compareToIgnoreCase(t1); //reverse the comparison, while ignoring case
            }
        });
import java.util.Arrays;

public class SortClass {
    public static void main(String[] args) {
        String[] arrayString = new String[5];
        arrayString[0] = "Cat";
        arrayString[1] = "Apple";
        arrayString[2] = "Dog";
        arrayString[3] = "Mouse";
        arrayString[4] = "kitchen";
        Arrays.sort(arrayString);
        String[] arrReverse = new String[arrayString.length];
        for (int i = arrayString.length - 1; i >= 0; i--) {
            arrReverse[arrayString.length - 1 - i] = arrayString[i];

        }
    }
}
String arr[]= new String[];
String s;     //input string
int count=0;
for(int i=0;i<=s.length()-k;i++){
                arr[i]=s.substring(i,i+k);  //using substring method
                count++;
            }


           int i=0;
           int b=count;
         while(count>0){
              int j=0; 
            while(j<b){
                 if((arr[i].compareTo(arr[j])>0)){  
                    String temp= arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                  }
            j++;
            } 
            i++; 
            count--;
        }

 for(i=0;i<b;i++)
     System.out.println(arr[i]);