我被分配了一项任务,要求我使用2D数组。我必须读入一个文件并将其导出到2D数组。我只能有一个方法,但我无法正确排序数组。我应该以3种方式对数据进行排序(按名称字母顺序排列,分数从最高到最低;每个学生从最高到最低得分,最高到最低得分为3分。)到目前为止我已经
import java.util.*;
import java.io.*;
public class ScoreSorter {
public static void main(String[] args) {
int student_num = 30;
String[][] DataInTableArr = new String[30][6];
try {
BufferedReader ReadIn = new BufferedReader(new FileReader("classZ.csv"));
for (int i = 0; i < 30; i++) {
String DataIn = ReadIn.readLine();
String[] DataInArr = DataIn.split(",");
DataInTableArr[i][0] = DataInArr[0];
DataInTableArr[i][1] = DataInArr[1];
DataInTableArr[i][2] = DataInArr[2];
DataInTableArr[i][3] = DataInArr[3];
int temptest1 = Integer.parseInt(DataInArr[1]);
int temptest2 = Integer.parseInt(DataInArr[2]);
int temptest3 = Integer.parseInt(DataInArr[3]);
}
} catch (Exception e) {
System.out.println("Whoops, you messed up, RESTART THE PROGRAM!!!!!");
}
}
}
我不知道如何解决剩下的任务......如果有人能告诉我最有效的方式,也许还有一个例子,我将不胜感激......
答案 0 :(得分:2)
一种合理的方法是创建一个实现Comparable接口的Student类,其中包含以下成员:
String name;
int scoreOne;
int scoreTwo;
int scoreThree;
compareTo(Student s) { //implement the comparison following 3 criteria you mentioned }
然后,逐行读取文件,为每一行创建一个Student对象,并将所有行放在TreeSet中。通过这种方式,TreeSet和compareTo方法将帮助我们自动对学生进行排序。
最后,迭代已排序的TreeSet以填充2D数组。
答案 1 :(得分:1)
import java.util.*;
import java.io.*;
public class ScoreSorter {
public static void main(String[] args) {
int student_num = 30;
String[][] DataInTableArr = new String[30][6];
try {
BufferedReader ReadIn = new BufferedReader(new FileReader("classZ.csv"));
for (int i = 0; i < 30; i++) {
String DataIn = ReadIn.readLine();
String[] DataInArr = DataIn.split(",");
DataInTableArr[i][0] = DataInArr[0];
DataInTableArr[i][1] = DataInArr[1];
DataInTableArr[i][2] = DataInArr[2];
DataInTableArr[i][3] = DataInArr[3];
int temptest1 = Integer.parseInt(DataInArr[1]);
int temptest2 = Integer.parseInt(DataInArr[2]);
int temptest3 = Integer.parseInt(DataInArr[3]);
}
/*Code To be Inserted Here*/
} catch (Exception e) {
System.out.println("Whoops, you messed up, RESTART THE PROGRAM!!!!!");
}
}
}
如果有6列,那么First是名字而另外3是得分那么其他2列包含什么?我忽略了你的数组声明:
String[][] DataInTableArr = new String[30][6];
并假设它是30x4数组
String[][] DataInTableArr = new String[30][4];
按字母顺序排序的逻辑
if(DataInTableArr[i][0].compareTo(DataInTableArr[i+1][0])){
/* Sorting Name of adjacent rows*/
String temp = DataInTableArr[i][0];
DataInTableArr[i][0] = DataInTableArr[i+1][0];
DataInTableArr[i+1][0] = temp;
/*Sorting the three marks similarly*/
temp = DataInTableArr[i][1];
DataInTableArr[i][1] = DataInTableArr[i+1][1];
DataInTableArr[i+1][1] = temp;
temp = DataInTableArr[i][2];
DataInTableArr[i][2] = DataInTableArr[i+1][2];
DataInTableArr[i+1][2] = temp;
temp = DataInTableArr[i][3];
DataInTableArr[i][3] = DataInTableArr[i+1][3];
DataInTableArr[i+1][3] = temp;
}
将上述代码放入气泡排序算法,即2循环。
根据最高分数排序的逻辑
在这种情况下,您必须在每个DataInTableArr [i]的所有三个主题中找到最高分,然后将最高分与下一行的分数进行比较。
根据平均标记排序的逻辑
计算每个第i行的平均值
(Integer.parseInt(DataInTableArr[i][1]) + Integer.parseInt(DataInTableArr[i][2]) + Integer.parseInt(DataInTableArr[i][3]))/3
并将其与[i + 1]行平均值进行比较。(相同的公式只是将[i]替换为[i + 1])