2014-02-23 81 views
-3

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

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

那么通常情况下,你不不必执行它们。我会看看Java Arrays API。我相信你可以用一种排序数组的方式来。试着在纸上画出你将如何排序一个小阵列 –

+0

@ user3259415你是按ID还是Score排序? – Mozzie

+0

那么,你应该先救每一个得分/ ID,排序它然后通过分数打印 –

回答

1

我将创建一个类来处理这个问题。

class Data { 
    private int id; 
    private int score; 

    //constructor and other stuff 
} 

既然你都这样了,创建一个List来保存你所有的DATAS

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

那么一个创建列表的类以及另一个包含dataComparator和Data类的类?我很新,所以它仍然有点混乱。 – user3259415

+0

@叫'Data' user3259415一类,将持有的ID和得分在文件中的每个条目,一个创造了比较(你可以让你的类实现可比的接口,但我认为这是最好创建一个自定义的比较,因为它更灵活,并不明显(而且可能要在将来改变!)你的数据都是通过分数,而不是IDS来分类的。名单('ArrayList'类)已经存在于JDK。 –