我正在编写一个程序来进行基础学位审核。我想阅读课程文本文件和成绩单文本文件。每个文件有3列,部门是#34; CPSC",课程编号" 1710",以及学分数" 3"。课程是部门,课程编号和学分。我如何比较"课程"在成绩单文件中的"课程"在课程文件中。然后存储"课程"与新的arrayList不同,并输出新的arrayList。
class Audit
{
private ArrayList<Course> curriculum;
private ArrayList<Course> transcript;
public Audit(String curriculumFilename, String transcriptFilename)
{
curriculum = readCourses(curriculumFilename);
transcript = readCourses(transcriptFilename);
}
public ArrayList<Course> degreeAudit() {
ArrayList<Course> courses = new ArrayList();
for(Course course : transcript)
{
for (int i = 0; i < curriculum.size(); i++)
{
if (!(curriculum.get(i).getDept().equals(course.getDept()) &&
(curriculum.get(i).getNumber().equals(course.getNumber()) )))
courses.add(curriculum.get(i));
}
}
return courses;
}
public void displayCurriculum(String msg)
{
System.out.println(msg);
System.out.println(curriculum);
}
public void displayTranscript(String msg)
{
System.out.println(msg);
System.out.println(transcript);
}
/*
Read ALL course information from the given filename.
Each line of the filename must be in the format: String String int
For example: CPSC 2740 3
*/
private ArrayList<Course> readCourses(String filename)
{
ArrayList<Course> courses = new ArrayList();
File file = new File(filename);
try
{
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine())
{
Course courseTemp = new Course();
courseTemp.set(scanner.next(), scanner.next(), scanner.nextInt());
courses.add(courseTemp);
}
scanner.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
return courses;
}
}
@Override
public boolean equals(Object rhs) {
if(rhs == null) return false;
if(rhs == this) return true;
if(!(rhs instanceof Course)) return false;
Course crse = (Course) rhs;
if(!dept.equals(((Course)rhs).dept)) return false;
if(number!=((Course)rhs).number) return false;
if(credits!=((Course)rhs).credits) return false;
return true;
}
答案 0 :(得分:0)
我从代码中理解的是,您一次从成绩单中选择一门课程,然后将其与课程中的所有课程相匹配。如果在三个实体的基础上不匹配,则将其添加到列表课程中。
好吧,我可以肯定地告诉你一件事,这会给你的成绩单中的所有文件,这些文件不在课程中,但是它不会给你提供课程中的文件,而不是成绩单。那是你要的吗?
另外,我不确定你要用equals方法做什么。而不是做
curriculum.get(i).getDept().equals(course.getDept())
你不应该这样做
curriculum.get(i).equals(course)
并传递此等于您要与之比较的课程。在您的Course类中,您重写equals方法。在平等的方法中,你只是在dept, number and credits
的基础上比较两个课程,我认为你已经在做了。