Java Serializable (загрузить объект и распечатать) - PullRequest
0 голосов
/ 27 сентября 2019

как я могу получить и запустить класс Main здесь?

Я хочу, чтобы отображались примечания и частота.

Поскольку оценка карты кратковременная, я должен воссоздать еев методе Load.Как именно это сделать?

Задача:

Реализуйте метод отсутствующей загрузки, соответствующий методу сохранения.Примечание. Атрибут gradeCount является временным, поэтому он не сохраняется.Поэтому забудьте о том, что при загрузке не пересчитывайте значения для gradeCount.

Я уже начал писать метод загрузки, но не могу продолжить.

Сначалакласс:

public class Exam implements Serializable {

private List <StudentGrade> grades = new ArrayList<>();

private transient Map <Integer, Integer> gradeCount;

public List<StudentGrade> getGrades() {
    return grades;
}

public void setGrades(List<StudentGrade> grades) {
    this.grades = grades;
}

public Map<Integer, Integer> getGradeCount() {
    return gradeCount;
}

public void setGradeCount(Map<Integer, Integer> gradeCount) {
    this.gradeCount = gradeCount;
}

public static void save(String string, Exam exam) {
    // TODO Auto-generated method stub

}

public static Exam load(String string) {
        // TODO Auto-generated method stub
        return null;
    }
 }

Второй класс:

public class StudentGrade implements Serializable {


private String student;
public String getStudent() {
    return student;
}

public void setStudent(String student) {
    this.student = student;
}

public int getGrade() {
    return grade;
}

public void setGrade(int grade) {
    this.grade = grade;
}

private int grade;

public StudentGrade (String student, int grade) {
    super();
    this.student = student;
    this.grade = grade;
}

}

Основной класс:

public class Main {

    public static void main(String[] args) throws ClassNotFoundException, IOException {

        Exam exam = new Exam();

        exam.getGrades().add(new StudentGrade("Alice", 230)); // 2,3
        exam.getGrades().add(new StudentGrade("Bob", 170)); // 1,7
        exam.getGrades().add(new StudentGrade("Charlie", 300)); // 3,0
        exam.getGrades().add(new StudentGrade("Dennis", 330));// 3,3
        exam.getGrades().add(new StudentGrade("Edith", 170)); // 1,7

        Exam.save("exam.ser", exam);
        exam = Exam.load("exam.ser");
        System.out.println(exam.getGradeCount());

    }

    public static void save (String filename, Exam exam) throws IOException{
        try (ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(filename)))){
            out.writeObject(exam);
        }
    }

    public static Exam load (String filename) throws IOException, ClassNotFoundException{

        Map <Integer, Integer> gradeCount;

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename));
            Exam exam = new Exam ();
            exam = (Exam) ois.readObject();

            ois.close();

            return exam;

    }

}

1 Ответ

0 голосов
/ 28 сентября 2019

Для тех, у кого такая же проблема:

    public static Exam load(String filename) throws IOException, ClassNotFoundException {

        Exam result = null;
        try (ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filename)))) {
            result = (Exam) ois.readObject();
        }
        if (result != null) {
            result.setGradeCount(new HashMap<>());
            for (StudentGrade grade : result.getGrades()) {
                Integer count = result.getGradeCount().get(grade.getGrade());
                if (count == null) {
                    count = 1;
                } else {
                    count++;
                }
                result.getGradeCount().put(grade.getGrade(), count);
            }
        }
        return result;
    }
}
...