// Computes the score by comparing the ratio of matches found to fingerprint size
 private void computeScore() {
   int max1 = 0;
   int max2 = 0;
   for (int i = 0; i < project1.getSourceFileCount(); i++) {
     max1 += project1.getSourceFile(i).fingerprint.size();
   }
   for (int i = 0; i < project2.getSourceFileCount(); i++) {
     max2 += project2.getSourceFile(i).fingerprint.size();
   }
   score1 = (double) usedHashes1.size() / max1;
   score2 = (double) usedHashes2.size() / max2;
 }
  private void checkPlagiarism() {
    for (int k = 0; k < project1.getSourceFileCount(); k++) {
      for (int l = 0; l < project2.getSourceFileCount(); l++) {
        boolean isPlagiarised = false;

        SourceFile src1 = project1.getSourceFile(k);
        SourceFile src2 = project2.getSourceFile(l);
        SourceFilePlagiarism sourceFilePlagiarism = new SourceFilePlagiarism(src1, src2);

        for (int m = 0; m < src1.fingerprint.size(); m++) {
          for (int n = 0; n < src2.fingerprint.size(); n++) {
            if (src1.fingerprint.get(m).value == src2.fingerprint.get(n).value) {
              isPlagiarised = true;
              this.isPlagiarised = true;

              int[] pos1 = new int[2];
              Hash hash1 = src1.fingerprint.get(m);
              pos1[0] = src1.fingerprint.get(m).startPos;
              pos1[1] = src1.fingerprint.get(m).endPos;

              int[] pos2 = new int[2];
              Hash hash2 = src2.fingerprint.get(n);
              pos2[0] = src2.fingerprint.get(n).startPos;
              pos2[1] = src2.fingerprint.get(n).endPos;

              sourceFilePlagiarism.addPlagiarisedScore(hash1, hash2, this);
            }
          }
        }
        if (isPlagiarised) {
          plagiarisedSourceFiles.add(sourceFilePlagiarism);
          sourceFilePlagiarism.computeScore();
        }
      }
    }
    computeScore();
  }