2012-06-05 3 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 содержит

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

Программа должна печатать каждое имя и верхние 3 баллов по отдельным линиям. Длинные ответы приветствуются. Спасибо заранее.

+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; 
} 

Ive изменил эти два метода так, чтобы он обрабатывал их как строку, а не каждую строку в файле. Теперь он берет каждую Линию и печатает ее с именем и тремя верхними оценками.

0

Что вы пытаетесь отсортировать здесь.

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

namenum - это список всех отдельных элементов в файле.

Mary 45 87 23 76 

Каждый элемент в этом списке является отдельным элементом в списке.

Вам нужно использовать nextLine(). Для каждой строки вам нужно пропустить первый токен, который является именем, и преобразовать остальную часть данных в строку в массиве integer и сделать обратную сортировку.

+0

Что это делает, это производит Мэри 87 76 45 23, а затем я печатаю первые 4 места , который является «Мэри 87 76 45» –

+0

Итак, он печатает три самых высоких балла. У вас проблема? –

+0

проблема заключалась в том, что она печатала только одну строку из файла правильно, если было больше строк, она бы смешала все результаты, и она сказала бы «Anne Joe Mary 99», –

Смежные вопросы