整数数组排序

时间:2014-02-23 21:57:14

标签: java arrays file sorting integer

所以我这里有这个代码,它接受一个文件并将其放入一个数组中。我现在需要做的是将第二列中的整数从大到小排序。这是我的代码,底部有一个数据文件的链接。我知道有排序算法,但我不知道如何实现它们。

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
    */

Link to data file

1 个答案:

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