所以我这里有这个代码,它接受一个文件并将其放入一个数组中。我现在需要做的是将第二列中的整数从大到小排序。这是我的代码,底部有一个数据文件的链接。我知道有排序算法,但我不知道如何实现它们。
import java.util.*;
import java.io.*;
public class sorter{
public static int id = 0;
public static int score = 0;
public static void main(String args[]){
Scanner inFile = null;
try {
inFile = new Scanner (new File ("sorter.txt"));
} catch (FileNotFoundException e) {
System.out.println("File not found!");
System.exit(0);
}
while (inFile.hasNextLine()){
String str = inFile.nextLine();
String [] parts = str.split(" ");
String part1 = parts[0];
String part2 = parts[1];
id = Integer.parseInt(part1);
score = Integer.parseInt(part2);
System.out.println(part1 + " " +part2);
}
}
}
输出应该是:
/*
ID Score
305 265
306 262
115 257
311 256
123 253
116 246
325 246
321 245
323 245
113 243
218 243
208 242
302 242
112 239
104 239
110 238
223 230
213 229
207 228
203 224
222 223
*/
答案 0 :(得分:1)
我会创建一个类来处理这个问题。
class Data {
private int id;
private int score;
//constructor and other stuff
}
现在你有了这个,创建一个List
来保存你的所有数据
List<Data> list = new ArrayList<>();
while (inFile.hasNextLine()){
String str = inFile.nextLine();
String [] parts = str.split(" ");
list.add(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
}
现在你有了这个列表,你可以对它进行排序。但是如何?
这是救援的API! Collections
类中有一种方法(称为sort
),可让您使用自定义Comparator
对列表进行排序。
那么你需要的是创建你的比较器,它将根据它们的分数比较你的对象:
static class DataComparator implements Comparator<Data> {
@Override
public int compare(Data d1, Data d2){
return Integer.compare(d1.getScore(), d2.getScore());
}
}
现在你有了这些,只需致电Collections.sort
:
Collections.sort(list, new DataComparator());