简体   繁体   中英

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

This is my list of Players and their Scores that I need to input from a text file, sort alphabetically, and then output to a new file. I then have to take the same list and sort it based on the average score at the end of each line and then output that sorted list to a file where the players are sorted by their scores. This is the list of players:

Bruce 127

Elayna 144

Lisa 153

Marcus 188

Amber 133

Ryan 149

Dorian 099

Joel 113

Kelly 097

This is my code so far. There are some methods and lines that are totally pointless that I haven't cleared out yet because I'm not sure if I need them or not.

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

}

I see that you can sort the array1 using array1.sort() this will only sort the array alphabetically. If you want to sort by the average test score I would do something like

    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();

Substring is a very useful method in java and could be used to solve at least on of your issues. You can read about it here: http://www.tutorialspoint.com/java/java_string_substring.htm

You can create Comparator:

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

and then use it in your code:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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