【问题标题】:Function is just reversing the order of the input instead of sorting it in descending order函数只是颠倒输入的顺序而不是按降序排序
【发布时间】:2020-08-25 17:30:33
【问题描述】:

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

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


    }

}

输入:

Input String #1: Stackoverflow
Input String #2: Java
Input String #3: ZZrot
Input String #4: coding
Input String #5: sorting

输出

tsronig
onigdc
zztro
vjaa
wvtsroolkfeca

预期输出:

zztro
wvtsroolkfeca
vjaa
tsronig
onigdc

对不起,我真的不知道该怎么办

【问题讨论】:

  • 您的排序字符串函数似乎给出了正确的输出,但是您的排序字符串数组函数在哪里?
  • 看看这个,它应该会为你指明正确的方向geeksforgeeks.org/comparator-interface-java
  • 在同一个函数中,我的导师告诉我们,对字符串数组进行排序和对字符串进行排序(逐个字符)应该在一个函数中。
  • 查看后,如果您需要更多帮助,请告诉我,但您可以在该链接中找到按降序对数组进行排序所需的一切。祝你好运!
  • 提示:要从升序到降序,您可以将 compareTo 的返回值乘以某个负数

标签: java arrays


【解决方案1】:

您已经非常接近解决方案了。

无法对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;
            }
        }
    }
}

main 方法也需要稍作改动:在对数组进行排序之前,必须先对字符串中的字符进行排序。这里,读取输入的同时对字符进行排序,然后通过一次调用sortArray对数组进行排序:

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] = sortString(UserInput.next().toLowerCase());
        }while(names[counter].length() > 25);
    }

    sortArray(names);

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

【讨论】:

    【解决方案2】:

    刚刚对您的代码进行了一些更改。 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]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多