2014-02-23 2 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 또는 점수별로 정렬하고 있습니까? – 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

@ user3259415 파일의 각 항목에 대해 ID와 점수를 보유하는 하나의 클래스, 비교기를 만드는 클래스 (클래스를 비교 가능한 인터페이스로 구현할 수는 있지만 사용자 정의 비교기를 만드는 것이 더 좋습니다. 좀 더 유연하고 명확하지 않고 (나중에 변경할 수도 있습니다!) 데이터가 점수가 아닌 ids별로 정렬됩니다. 목록 ('ArrayList' 클래스)은 이미 JDK에 있습니다. –