比较两个文本文件并输出不同的元素

时间:2014-04-10 03:03:40

标签: java algorithm text-files

我正在编写一个程序来进行基础学位审核。我想阅读课程文本文件和成绩单文本文件。每个文件有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;
}

1 个答案:

答案 0 :(得分:0)

我从代码中理解的是,您一次从成绩单中选择一门课程,然后将其与课程中的所有课程相匹配。如果在三个实体的基础上不匹配,则将其添加到列表课程中。

好吧,我可以肯定地告诉你一件事,这会给你的成绩单中的所有文件,这些文件不在课程中,但是它不会给你提供课程中的文件,而不是成绩单。那是你要的吗?

另外,我不确定你要用equals方法做什么。而不是做

curriculum.get(i).getDept().equals(course.getDept())

你不应该这样做

curriculum.get(i).equals(course)

并传递此等于您要与之比较的课程。在您的Course类中,您重写equals方法。在平等的方法中,你只是在dept, number and credits的基础上比较两个课程,我认为你已经在做了。