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.