как я могу прочитать текстовый файл, обработать его и написать toString () - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть ряд проблем с этим:

1) В какой класс я бы хотел поместить свой сканер, чтобы он назначал правильные переменные?В задании, которое мне дано, написано «прочитать файл данных в учеников» в классе тестера

2) Как я могу создать метод readFile() в классе учеников?

3) Как можноЯ правильно пишу toString() в классах учеников и учеников?

import java.io.*;
import java.util.*;

public class Tester
{
    public static void main(String args[]) throws IOException
    {
        //new Students object
        Students theStudents = new Students();

        //reads file from Students
        theStudents.readFile();

        // create new 'Output.txt' file to save program output
        PrintWriter ot = new PrintWriter(new FileWriter("Output.txt"));

        System.out.println(theStudents.toString());
        ot.println(theStudents.toString());

        ot.close();
    }
}

import java.util.ArrayList;
import java.io.*;     
import java.util.*;    
import java.io.FileReader;

public class Students
{
    // instance variables
    private ArrayList<Student> students;

    public Students()
    {
        //create arraylist for students
        students = new ArrayList<>();
    } 

    public void readFile() throws IOException
    {
        String name;
        int age;
        double gpa;

        String line;

        //Scanner to read file
        try {
        Scanner sc = new Scanner(new File("Students.txt"));
        while (sc.hasNextLine()) {
            name = sc.nextLine();

            line = sc.nextLine();
            age = Integer.parseInt(line);

            line = sc.nextLine();
            gpa = Double.parseDouble(line);
        }
        }
        catch (FileNotFoundException e) {
              System.out.println("Error");
        }
    }

    public void add(Student s)
    {
        students.add(s);
    }

    public Students aboveAverage(double avgGPA)
    {
        Students aboveAverage = new Students(); 

        for (int i = 0; i < students.size(); ++i) {
            if (students.get(i).getGPA() > avgGPA)
                aboveAverage.add(students.get(i));
        }
        return aboveAverage;
    }

    public String toString()
    {
        String out = "";

        int count = 0;
        for (Student student : students){
            out += students.toString() + " ";
            ++count;
        }

        return out;
    }
}

public class Student
{
    private String name;
    private int age;
    private double gpa;

    public Student(String studentName, int studentAge, double studentGPA)
    {
        name = studentName;
        age = studentAge;
        gpa = studentGPA;
    }

    public String getName()
    {
        return name;
    }

    public int getAge()
    {
        return age;
    }

    public double getGPA()
    {
        return gpa;
    }

    public String toString()
    {
        return String.format("%10s", name) + 
               String.format("%5d", age) + String.format("%10.2f \n", gpa);
    }
}

1 Ответ

0 голосов
/ 12 декабря 2018

Я не собираюсь давать вам полное решение, но вот способ решения этой проблемы.

  • Вам нужно readLine() вместо nextLine()
  • Как только выЧтобы прочитать значения, вам нужно вызвать функцию add() с объектом Student , чтобы добавить его в ArrayList.

Фрагмент кода:

try (Scanner sc = new Scanner(new File("Students.txt"))) {
    while (sc.hasNextLine()) {
      String name = sc.readLine();
      int age = Integer.parseInt(sc.readLine());
      double gpa = Double.parseDouble(sc.readLine());
      /* Create A New Student Object & Add To List */
      add(new Student(name, age, gpa));
    }
} catch (FileNotFoundException e) {
    System.out.println("Error");
}

Также вам необходимо @Override функция toString().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...