繁体   English   中英

按字母顺序对字符串数组进行排序。 如何按每行中间的数字对同一数组进行排序

[英]Sorted an array of strings alphabetically. How do I sort the same array by a number in the middle of each line

这是我需要从文本文件中输入,按字母顺序排序然后输出到新文件的播放器及其分数的列表。 然后,我必须采用相同的列表,并根据每行末尾的平均得分对其进行排序,然后将排序后的列表输出到一个文件中,在此文件中,玩家将按其得分进行排序。 这是球员名单:

布鲁斯127

伊莱娜144

丽莎153

马库斯188

琥珀色133

瑞安149

多利安099

乔尔113

凯利097

到目前为止,这是我的代码。 有些方法和行完全没有意义,我尚未清除,因为我不确定是否需要它们。

public class MembersAndScores 
{

    //trying to create a method to read the input file, examine the first character in each line, and sort accordingly to get an alphabetically ordered list

    public static void insert(int[] x, int i)
    {
        int temp = x[i];
        int j = i - 1;
        while (j >= 0 && temp <x[j])
        {
            x[j+1] = x[j];
            j--;
        }
        x[j+1] = temp;
    }

    //Uses the insert method above by calling it to sort the array of strings below that hold the names and scores of the bowlers.
    public static void insertionsort(int[] x)
    {
        for (int i = 1; i < 9; i++)
            insert(x, i);
    }


    public static void main(String[] args) throws IOException
    {
        File inputFile = new File("players_scores.txt");
        if (!inputFile.exists())
        {
            System.out.println("File players_scores.txt was not found.");
            System.exit(0);
        }
        //setting up Scanner to read the input File, players_scores.txt. Created a String array to store the lines of text in.
        Scanner input = new Scanner(inputFile);
        String line;
        String[] array1 = new String[9];

        for (int i = 0; i <9; i++)
        {
            line = input.nextLine();
            array1[i]= line;
        }
        //calling my sorting method to sort the lines stored inside array1[0] through array1[8].
        Arrays.sort(array1);

        //begins the process of creating the file where data is sorted by name. program checks for txt file and creates it if missing.  
        File sortName = new File("sortedbyname.txt");
        PrintWriter output = new PrintWriter(sortName);

        //checks to see if the file exists and creates it if it doesn't
        if(!sortName.exists())
        {
            sortName.createNewFile();
        }

        for (int i = 0; i < 9; i++)
        {
            output.println(array1[i]);
        }
        output.close(); 
        //close output so it finishes up and prints the stored lines to the document.


        //begins the process of creating the file where data is sorted by score
        File sortScore = new File("sortedbyscore.txt"); 
        PrintWriter output2 = new PrintWriter(sortScore);
        String line2;


        Arrays.sort(array1);

        //computer checks to see if it doesn't exist and creates it if it doesn't
        if(!sortScore.exists())
        {
            sortScore.createNewFile();
        }

        for (int i = 0; i < 9; i++)
        {
            output2.println(array1[i]);
        }

        output2.close();
        input.close();
    }

}

我看到您可以使用array1.sort()对array1进行排序,这只会按字母顺序对数组进行排序。 如果您想按平均考试成绩排序,我会做类似的事情

    int avgScore[] = new int[9]; //make the nine whatever value you need.
    for(int i=0; i<avgScore.length;i++){
         avgScore[i] = Integer.parseInt(array1[i].substring(array1[i].length-                       3,array1[i].length));
    }
    avgScore.sort();

子字符串是Java中非常有用的方法,至少可用于解决您的问题。 您可以在这里阅读有关内容: http : //www.tutorialspoint.com/java/java_string_substring.htm

您可以创建比较器:

static class ComparatorByScore implements Comparator<String> {

    public int compare(String o1, String o2) {
        Integer first = Integer.parseInt(o1.split(" ")[1]);
        Integer second = Integer.parseInt(o1.split(" ")[1]);
        return first.compareTo(second);
    }
}

然后在您的代码中使用它:

Arrays.sort(array1, new ComparatorByScore());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM