第一次编程作业
第一次个人编程作业
需求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
- 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
- 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
- 从命令行参数给出:论文原文的文件的绝对路径。
- 从命令行参数给出:抄袭版论文的文件的绝对路径。
- 从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
一、PSP表格
*PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | *实际耗时(分钟)* |
---|---|---|---|
Planning | 计划 | 20 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 60 | 70 |
Development | 开发 | 30 | 50 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 50 |
· Design Spec | · 生成设计文档 | 20 | 30 |
· Design Review | · 设计复审 | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
· Design | · 具体设计 | 10 | 10 |
· Coding | · 具体编码 | 60 | 20 |
· Code Review | · 代码复审 | 10 | 10 |
· Test | · 测试(自我测试,修改代码,提交修改) | 10 | 10 |
Reporting | 报告 | 20 | 20 |
· Test Repor | · 测试报告 | 10 | 10 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
· 合计 | 330 | 370 |
二.异常情况
1.输入的参数不为3个
2.找不到对应文件
三.源代码
package com.example.personalobj;
import java.io.*;
import java.util.*;
public class PlagiarismChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入原文文件路径:");
String originalFilePath = scanner.nextLine();
System.out.println("请输入抄袭版文件路径:");
String plagiarizedFilePath = scanner.nextLine();
System.out.println("请输入输出文件路径:");
String outputFilePath = scanner.nextLine();
try {
String originalText = readFile(originalFilePath);
String plagiarizedText = readFile(plagiarizedFilePath);
double similarity = calculateSimilarity(originalText, plagiarizedText);
writeResult(outputFilePath, similarity);
} catch (IOException e) {
e.printStackTrace();
}
}
private static String readFile(String filePath) throws IOException {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
}
return content.toString();
}
private static double calculateSimilarity(String text1, String text2) {
// 这里简单地比较两份文本的相同词语数量
String[] words1 = text1.split("\\s+");
String[] words2 = text2.split("\\s+");
int commonWords = 0;
for (String word1 : words1) {
for (String word2 : words2) {
if (word1.equalsIgnoreCase(word2)) {
commonWords++;
break;
}
}
}
int totalWords = Math.max(words1.length, words2.length);
return (double) commonWords / totalWords;
}
private static void writeResult(String filePath, double similarity) throws IOException {
try (PrintWriter writer = new PrintWriter(filePath)) {
writer.println("重复率:" + (similarity * 100) + "%");
}
}
}
四.测试
五.开发环境
idea-2022.2.2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix