2012-06-05 1 views
1

이것은 파일에서 읽는 프로그램이지만 파일 리더를위한 강의를하기 때문에 나는 그것을 날개에 달고있다. 이 프로그램은 현재 한 행을 읽고 상위 3 개 값을 인쇄하지만 파일의 한 행에서만 작동합니다.내 프로그램을 개별적으로 3 행씩 읽음

import java.util.*; 
import java.io.*; 
public class ProcessdatdereFile 
{ 
    public static void main (String[] args)throws IOException{ 
     List namenum=readM("data/raw.txt"); 
     dataProcess(namenum); 
    } 

    public static List readM(String filename)throws IOException{ 
     Scanner fr=new Scanner(new FileReader(filename)); 
     List<String>namenum=new ArrayList<String>(); 
     while(fr.hasNext()){ 
      namenum.add(fr.next()); 
     } 
     fr.close(); 
     Collections.sort(namenum,Collections.reverseOrder()); 
     return namenum; 
    } 

    public static void dataProcess(List namenum)throws IOException{ 
     for(int i=0;i<4;i++){ 
      System.out.printf("%s ",namenum.get(i)); 
     } 
     System.out.println(""); 
    } 
} 

raw.txt이 프로그램은 각각의 이름과 개별 라인의 상위 3 개 점수를 인쇄 할 필요가

Mary 45 87 23 76 
Joe 34 76 12 78 34 87 
Anne 90 5 99 

가 포함되어 있습니다. 오랫동안의 답변을 환영합니다. 미리 감사드립니다.

+2

무엇이 당신의 질문입니까? –

+0

무엇이 질문입니까? 무슨 문제 야? – tibo

+0

fr.next()를 fr.nextLine()으로 변경 하시겠습니까? –

답변

0
public static void main (String[] args)throws IOException{ 
    String filename = "data/raw.txt"; 
    Scanner fr=new Scanner(new FileReader(filename)); 
    //reads the line and passes it to another method where it is put into a list 
    String line; 
    while(fr.hasNextLine()){ 
     line=fr.nextLine(); 
     List namenum=readM(line); 
     dataProcess(namenum); 
    } 
    fr.close();   
} 

public static List readM(String line)throws IOException{ 
    Scanner scn=new Scanner(line); 
    List<String>namenum=new ArrayList<String>(); 
    while(scn.hasNext()){ 
     namenum.add(scn.next()); 
    } 
    Collections.sort(namenum,Collections.reverseOrder()); 
    return namenum; 
} 

필자는 파일의 각 문자열이 아닌 줄로 처리하도록이 두 가지 방법을 변경했습니다. 이제는 각 라인을 가져 와서 이름과 3 개의 최고 점수로 인쇄합니다.

0

여기서 무엇을 정렬하려고합니까?

Collections.sort(namenum,Collections.reverseOrder()); 

namenum은 파일의 모든 개별 항목 목록입니다.

Mary 45 87 23 76 

목록의 각 항목은 목록의 개별 항목입니다.

nextLine()을 사용해야합니다. 각 줄마다 이름 인 첫 번째 토큰을 건너 뛰고 정수 배열의 나머지 데이터를 한 줄로 변환 한 다음 역 정렬을 수행해야합니다.

+0

그것은 Mary 87 76 45 23을 만든 다음 처음 4 개를 인쇄합니다. "Mary 87 76 45" –

+0

그래서 3 개의 가장 높은 점수를 인쇄합니다. 문제가 있습니까? –

+0

문제는 파일에서 한 줄만 올바르게 인쇄되었지만 줄이 더 많으면 모든 결과가 혼합되어 "Anne Joe Mary 99"라고 표시됩니다. –