Отображение текстового файла в Java - PullRequest
0 голосов
/ 31 августа 2018

Я новичок в программировании на Java.

У меня есть текстовый файл, например C:/Temp/dat.txt.

Это код, который я установил в Main Class :

public static boolean readFile(String filename) {
    File file = new File(filename);

    try {
        Scanner scanner = new Scanner(file);
        while(scanner.hasNextLine()){
            String[] words = scanner.nextLine().split(",");

            int id = Integer.parseInt(words[0]);
            String firstName = words[1];
            String lastName = words[2];
            int mathMark1 = Integer.parseInt(words[3]);
            int mathMark2 = Integer.parseInt(words[4]);
            int mathMark3 = Integer.parseInt(words[5]);
            int englishMark1 = Integer.parseInt(words[6]);
            int englishMark2 = Integer.parseInt(words[7]);
            int englishMark3 = Integer.parseInt(words[8]);

            addStudent(id,firstName,lastName,mathMark1,mathMark2,mathMark3,englishMark1,englishMark2,englishMark3); 
        }
        scanner.close();
    } catch (FileNotFoundException e) {
        System.out.println("Failed to read file");
    }
    return true;
}

Теперь мне нужно отобразить эти данные из текстового файла следующим способом:

private static void displayReportByMarks() {

}

Как заставить отчет отображаться из текстового файла в этом методе, и какой код следует использовать (если он есть) в методе Main этого класса.

Надеюсь, это имеет смысл, так как я сказал, что я полный новичок в Java и не могу разобраться с этим.

Большое спасибо

Amanda

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Предположим, у вас Stundent реализован как стандартный POJO, сначала реализуйте метод addStudent:

private List<Student> students = new ArrayList<>();

private static void addStudent(int id, String firstName, String lastName, 
                               int mathMark1, int mathMark2, int mathMark3, 
                               int englishMark1, int englishMark2,
                               int englishMark3) {
    students.add(new Student(id, firstName, lastName, mathMark1, mathMark2,
                     mathMark3, englishMark1, englishMark2,englishMark3));
}

Затем вы можете реализовать метод печати:

private static void displayReportByMarks() {
     List<Student> studentsByMarks = students.stream().sorted(
             (s1, s2) -> //just do the comparison for sorting here
             )).collect(Collectors.toList());
     for (Student : students) {
          // assuming you have a Student.toString() method implemeted.
          System.out.println(student);
     }
}
0 голосов
/ 31 августа 2018

Первый трюк состоит в том, чтобы покончить со всеми этими static -ами и обработать один объект класса Main. В методе main создайте главный объект.

Тогда еще многое не сказано о том, как найти учеников, так что можно сортировать / переупорядочивать их и перебирать их. Но это все равно будет твоя домашняя работа. Схематично это будет следующим.

public class Main {
    private List<Student> students = new ArrayList<>();

    public static void main(String[] args) {
        new Main().process();
    }

    private void process() {
        ...
        displayReportByMarks();
    }

    private void displayReportByMarks() {
         Collections.sort(students, ...); // On marks.
         students.sort(...); // Or this.
         for (Student : students) {
             ...
         }
    }
...