[英]Java Serializable (load Object and print)
我怎样才能让主 class 在这里启动并运行?
我希望显示音符和频率。
因为 mapgradeCount 是瞬态的,所以我必须在 Load 方法中重新创建它。 我该怎么做?
任务是:
实现缺少的加载方法以匹配保存方法。 注意:gradeCount 属性是瞬态的,所以不保存。 忘记因此在加载时不要重新计算gradeCount 的值。
我已经开始编写加载方法,但无法进一步。
第一个 class:
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;
}
}
第二个 class:
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;
}
}
主class:
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;
}
}
对于那些有同样问题的人:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.