簡體   English   中英

比較兩個文本文件並輸出不同的元素

[英]Compare two text files and output the elements that are different

我正在編寫程序進行基礎學位審核。 我想閱讀課程文本文件和成績單文本文件。 每個文件都有3列,分別是部門“ 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;
}

我從代碼中了解到,您一次要學習一個成績單,然后將其與課程中的所有課程相匹配。 如果is在三個實體的基礎上不匹配,則將其添加到列表課程中。

好吧,我可以肯定地告訴你,這將為您提供成績單中所有不在課程表中的文件,但不會為您提供課程中但不在成績單中的文件。 那是你要的嗎?

另外,我不確定您要使用equals方法做什么。 而不是做

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

你不應該在做什么

curriculum.get(i).equals(course)

並通過此等於您要與之比較的過程。 在課程類中,您將覆蓋equals方法。 用均等的方法,您只需要根據dept, number and credits比較兩個課程,我認為您已經在做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM