Java 函数只是颠倒输入的顺序,而不是按降序排序

Java 函数只是颠倒输入的顺序,而不是按降序排序,java,arrays,Java,Arrays,我需要制作一个程序,从用户那里获取字符串输入并将其存储在数组中。然后我需要创建一个函数,首先:按降序对每个字符串{character by character}进行排序,然后:按降序对所有字符串输入{Strings}进行排序 package com.company; import java.util.Arrays; import java.util.Scanner; public class Main { static String sortString(String str)

我需要制作一个程序,从用户那里获取字符串输入并将其存储在数组中。然后我需要创建一个函数,首先:按降序对每个字符串{character by character}进行排序,然后:按降序对所有字符串输入{Strings}进行排序

package com.company;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static String sortString(String str)
    {
        
        char[] chArr = str.toCharArray();
        String SortString = "";

        // For sorting each individual strings character by character
        for (int i = 0; i< chArr.length; i++)
        {
            for (int j = 0; j < chArr.length; j++)
            {
                if(chArr[i] > chArr[j])
                {
                    char temp = chArr[i];
                    chArr[i] = chArr[j];
                    chArr[j] = temp;
                }
            }
        }

        //converting all of the character into a single string
        for (int k = 0; k<chArr.length;k++)
        {
            SortString = SortString + chArr[k];
        }

        //Assigning the current String Sortstring to an array
        String[] OldArray = new String[5];
        for (int counter = 0; counter<5; counter++)
        {
            OldArray[counter] = SortString;
        }

        //sorting all of the strings in descending order
        for (int i = 0; i< OldArray.length;i++)
        {
            for (int j = i+1; j< OldArray.length;j++)
            {
                if(OldArray[i].compareTo(OldArray[j]) > 0)
                {
                    String temp = OldArray[i];
                    OldArray[i] = OldArray[j];
                    OldArray[j] = temp;
                }
            }
        }

        return OldArray[0];
    }

    public static void main(String[] args)
    {
        Scanner UserInput = new Scanner (System.in);

        String[] names = new String[5];

         // will take a String user input from a user and store it in an arra
        for (int counter = 0; counter<5; counter++)
        {
            do
            {
                System.out.print("Input String #" + (counter+1) + ": ") ;
                names[counter] = UserInput.next().toLowerCase();
            }while(names[counter].length() > 25);
        }

        //will print the assorted array
        for(int i = 4; i >= 0; i--)
        {
            System.out.println((sortString(names[i])));
        }


    }

}
输出

tsronig
onigdc
zztro
vjaa
wvtsroolkfeca
预期产出:

zztro
wvtsroolkfeca
vjaa
tsronig
onigdc

很抱歉,我真的不知道该怎么办

你已经接近解决方案了

无法对
sortString
中的字符串数组进行排序,因为它只能访问您传入的一个字符串。将数组排序代码移动到一个单独的方法,然后可以在将其传递给整个数组时调用它:

static String sortString(String str) {

    char[] chArr = str.toCharArray();
    String SortString = "";

    // For sorting each individual strings character by character
    for (int i = 0; i < chArr.length; i++) {
        for (int j = 0; j < chArr.length; j++) {
            if (chArr[i] > chArr[j]) {
                char temp = chArr[i];
                chArr[i] = chArr[j];
                chArr[j] = temp;
            }
        }
    }

    //converting all of the character into a single string
    for (int k = 0; k < chArr.length; k++) {
        SortString = SortString + chArr[k];
    }

    return SortString;
}

static void sortArray(String[] OldArray) {

    //sorting all of the strings in descending order
    for (int i = 0; i< OldArray.length;i++)
    {
        for (int j = i+1; j< OldArray.length;j++)
        {
            if(OldArray[i].compareTo(OldArray[j]) > 0)
            {
                String temp = OldArray[i];
                OldArray[i] = OldArray[j];
                OldArray[j] = temp;
            }
        }
    }
}

你非常接近解决方案

无法对
sortString
中的字符串数组进行排序,因为它只能访问您传入的一个字符串。将数组排序代码移动到一个单独的方法,然后可以在将其传递给整个数组时调用它:

static String sortString(String str) {

    char[] chArr = str.toCharArray();
    String SortString = "";

    // For sorting each individual strings character by character
    for (int i = 0; i < chArr.length; i++) {
        for (int j = 0; j < chArr.length; j++) {
            if (chArr[i] > chArr[j]) {
                char temp = chArr[i];
                chArr[i] = chArr[j];
                chArr[j] = temp;
            }
        }
    }

    //converting all of the character into a single string
    for (int k = 0; k < chArr.length; k++) {
        SortString = SortString + chArr[k];
    }

    return SortString;
}

static void sortArray(String[] OldArray) {

    //sorting all of the strings in descending order
    for (int i = 0; i< OldArray.length;i++)
    {
        for (int j = i+1; j< OldArray.length;j++)
        {
            if(OldArray[i].compareTo(OldArray[j]) > 0)
            {
                String temp = OldArray[i];
                OldArray[i] = OldArray[j];
                OldArray[j] = temp;
            }
        }
    }
}

刚刚对代码做了一些更改
sortString()
工作正常

仅对
main()
方法进行了更改:

已获得预期输出,请尝试以下操作:

public static void main(String[] args)
{
    Scanner UserInput = new Scanner (System.in);
    String[] names = new String[5];
    // will take a String user input from a user and store it in an arra
    for (int counter = 0; counter<5; counter++)
    {
        do
        {
            System.out.print("Input String #" + (counter+1) + ": ") ;
            names[counter] = UserInput.next().toLowerCase();
        }while(names[counter].length() > 25);
    }

    //will print the assorted array
    String[] namesReversed = new String[names.length];
    for(int i=0;i<names.length;i++){
        namesReversed[i]=sortString(names[i]);
    }
    Arrays.sort(namesReversed, String::compareToIgnoreCase);
    for(int i = namesReversed.length-1; i>=0; i--)
    {
        System.out.println(namesReversed[i]);
    }
}
publicstaticvoidmain(字符串[]args)
{
扫描仪用户输入=新扫描仪(System.in);
字符串[]名称=新字符串[5];
//将从用户获取字符串用户输入并将其存储在arra中
用于(整数计数器=0;计数器25);
}
//将打印组合数组
String[]namesReversed=新字符串[names.length];
对于(int i=0;i=0;i--)
{
System.out.println(名称反转[i]);
}
}

刚刚对代码做了一些更改
sortString()
工作正常

仅对
main()
方法进行了更改:

已获得预期输出,请尝试以下操作:

public static void main(String[] args)
{
    Scanner UserInput = new Scanner (System.in);
    String[] names = new String[5];
    // will take a String user input from a user and store it in an arra
    for (int counter = 0; counter<5; counter++)
    {
        do
        {
            System.out.print("Input String #" + (counter+1) + ": ") ;
            names[counter] = UserInput.next().toLowerCase();
        }while(names[counter].length() > 25);
    }

    //will print the assorted array
    String[] namesReversed = new String[names.length];
    for(int i=0;i<names.length;i++){
        namesReversed[i]=sortString(names[i]);
    }
    Arrays.sort(namesReversed, String::compareToIgnoreCase);
    for(int i = namesReversed.length-1; i>=0; i--)
    {
        System.out.println(namesReversed[i]);
    }
}
publicstaticvoidmain(字符串[]args)
{
扫描仪用户输入=新扫描仪(System.in);
字符串[]名称=新字符串[5];
//将从用户获取字符串用户输入并将其存储在arra中
用于(整数计数器=0;计数器25);
}
//将打印组合数组
String[]namesReversed=新字符串[names.length];
对于(int i=0;i=0;i--)
{
System.out.println(名称反转[i]);
}
}

您的排序字符串函数似乎给出了正确的输出,但排序字符串数组函数在哪里?看看这个,它应该会为您指出相同函数的正确方向,我的导师告诉我们,排序字符串数组和排序字符串(逐字符)应该在单个函数中。一旦您签出它,如果您需要更多帮助,请告诉我,但是可以在该链接中找到按降序排序数组所需的所有内容。祝你好运提示:要从升序到降序,您可以将compareTo的返回值乘以某个负数。我们的排序字符串函数似乎给出了正确的输出,但排序字符串数组函数在哪里?请看一下,它应该为您指出同一函数的正确方向,我的指导老师告诉我们,字符串数组的排序和字符串的排序(字符对字符)应该在一个函数中完成。一旦您签出它,如果您需要更多帮助,请告诉我,但是可以在该链接中找到按降序排序数组所需的所有内容。祝你好运提示:要从升序到降序,可以将compareTo的返回值乘以某个负数