实现一个自动生成小学四则运算题目的命令行程序

news/2024/11/17 21:29:37/文章来源:https://www.cnblogs.com/Zhang1vcheng/p/18434831
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230
这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序

项目成员

本结对项目由
-- 3122004589 张逸程
-- 3122004581 萨穆哈尔·艾得力

GiThub:https://github.com/Zhang1chen/3122004589.git

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间 300 400
Development 开发 200 130
Analysis 需求分析 (包括学习新技术) 30 60
Design Spec 生成设计文档 30 30
Design Review 设计复审 10 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 20
Design 具体设计 60 50
Coding 具体编码 300 400
Code Review 代码复审 30 60
Test 测试(自我测试,修改代码,提交修改) 30 40
Reporting 报告 30 30
Test Repor 测试报告 60 60
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 50 50
合计 1450 1320

性能分析




代码运行

生成题目数和值的范围,并写进文档

public static void main(String[] args){
//        先测试10个例子看看int numberQuestions=10;int range=10;if(numberQuestions==0){System.out.println("错误:使用 -n 参数控制生成题目的个数");return;}if(range==0){System.out.println("错误:使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围");
//            遇到错误直接结束return;}
//        makeQuestions(numberQuestions,range);try {makeQuestions(numberQuestions,range);}catch (IOException e){System.out.println("生成题目时发生错误: "+e.getMessage());}private static void makeQuestions(int numberQuestions, int range) throws IOException{
//        创建HashSet集合,主要用来去重Set<String> questions=new HashSet<>();
//        创建写入文档对象FileWriter exercisesWriters=new FileWriter(EXERCISES_FILE);FileWriter answersWriters=new FileWriter(ANSWERS_FILE);String question;String answer;while (questions.size()<numberQuestions){
//            生成一个0-3之间的随机数,用于选择运算符
//            0:+
//            1:-
//            2:*
//            3:/int operation=random.nextInt(4);
//            生成两个0-range之间的随机数,用来参与运算int number1=random.nextInt(range);int number2=random.nextInt(range);switch (operation){case 0:{question=number1+"+"+number2+"= ?" ;
//                    计算算数之后的值answer=String.valueOf(number1+number2);
//                    判断是否重复,这就用到了HashSet集的特点,无序,不重复,无索引if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}case 1: {
//                    结果不能出现负数,所以先判断谁大谁小,将大的赋给number1if(number2>number1){int temp=number1;number1=number2;number2=temp;}question=number1+"-"+number2+"= ?" ;answer=String.valueOf(number1-number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}case 2: {question=number1+"*"+number2+"= ?" ;answer=String.valueOf(number1*number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}case 3: {if(number2==0||number2==10){number2=random.nextInt(range)+1;}question=number1+"/"+number2+"= ?" ;answer=String.valueOf(number1/number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}}}exercisesWriters.close();answersWriters.close();}

生成题目中计算过程中不产生负数
点击查看代码

结果不能出现负数,所以先判断谁大谁小,将大的赋给number1if(number2>number1){int temp=number1;number1=number2;number2=temp;}question=number1+"-"+number2+"= ?" ;answer=String.valueOf(number1-number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;

判断答案的正确与否,并写进文档
点击查看代码

private static boolean isCorrectAnswer(String exercise, String answer) {String[] exercises=new String[2];boolean flag=false;for (int i=0;i<exercise.length();i++){if(exercise.charAt(i)=='+') {exercises=exercise.split("\\+");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1+num2==answers) flag=true;break;}else if(exercise.charAt(i)=='-'){exercises=exercise.split("-");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1-num2==answers) flag=true;break;} else if (exercise.charAt(i)=='*') {exercises=exercise.split("\\*");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1*num2==answers) flag=true;break;}else if(exercise.charAt(i)=='/'){exercises=exercise.split("/");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1/num2==answers) flag=true;break;}}return flag;}private static int  isNum(String number) {int num= Integer.parseInt(number);return num;}

测试运行

控制生成题目的个数,以及题目数值的范围
并将生成的题目和答案写进文档`
点击查看代码```
`package 博客.结对项目;import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;public class Test1 {//    final定义局部变量,将Exercises.txt和Answers.txt卸载最开头,则所有方法中都可以调用
//    将随机生成的函数也写在最开头private static final String EXERCISES_FILE="Exercises.txt";private static final String ANSWERS_FILE="Answers.txt";private static final Random random=new Random();public static void main(String[] args) {
//        控制生成题目的个数,以及题目数值的范围
//        并将生成的题目和答案写进文档//        先测试10个例子看看int numberQuestions=10;int range=10;if(numberQuestions==0){System.out.println("错误:使用 -n 参数控制生成题目的个数");return;}if(range==0){System.out.println("错误:使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围");
//            遇到错误直接结束return;}
//        makeQuestions(numberQuestions,range);try {makeQuestions(numberQuestions,range);}catch (IOException e){System.out.println("生成题目时发生错误: "+e.getMessage());}}private static void makeQuestions(int numberQuestions, int range) throws IOException{
//        创建HashSet集合,主要用来去重Set<String> questions=new HashSet<>();
//        创建写入文档对象FileWriter exercisesWriters=new FileWriter(EXERCISES_FILE);FileWriter answersWriters=new FileWriter(ANSWERS_FILE);String question;String answer;while (questions.size()<numberQuestions){
//            生成一个0-3之间的随机数,用于选择运算符
//            0:+
//            1:-
//            2:*
//            3:/int operation=random.nextInt(4);
//            生成两个0-range之间的随机数,用来参与运算int number1=random.nextInt(range);int number2=random.nextInt(range);switch (operation){case 0:{question=number1+"+"+number2+"= ?" ;
//                    计算算数之后的值answer=String.valueOf(number1+number2);
//                    判断是否重复,这就用到了HashSet集的特点,无序,不重复,无索引if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}case 1: {
//                    结果不能出现负数,所以先判断谁大谁小,将大的赋给number1if(number2>number1){int temp=number1;number1=number2;number2=temp;}question=number1+"-"+number2+"= ?" ;answer=String.valueOf(number1-number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}case 2: {question=number1+"*"+number2+"= ?" ;answer=String.valueOf(number1*number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}case 3: {if(number2==0||number2==10){number2=random.nextInt(range)+1;}question=number1+"/"+number2+"= ?" ;answer=String.valueOf(number1/number2);if(!questions.equals(question)){questions.add(question);exercisesWriters.write(question+"\n");answersWriters.write(answer+"\n");}break;}}}exercisesWriters.close();answersWriters.close();}
}



从外部当如文件,判断对错个数

点击查看代码

`package 博客.结对项目;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;public class Test2 {public static void main(String[] args) {
//        从外部当如文件,判断对错个数//        找到文件的路径String exerciseFilePath="D:\\idea\\basic-code\\Exercises.txt";String answerFilePath="D:\\idea\\basic-code\\Answers.txt";//        出错显示if(exerciseFilePath==null||answerFilePath==null){System.out.println("Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt");return;}//        读取题目和答案try {
//            调用readFile函数,读取文件,并把他们放到list集合中,方便以后调用List<String> exercises=readFile(exerciseFilePath);List<String> answers=readFile(answerFilePath);//            判断是否正确,并统计List<Integer> correct=new ArrayList<>();List<Integer> wrong=new ArrayList<>();
//            1.逐个获取exercises,和answers
//            2.利用分割函数split,将函数分开
//            3.然后调用isCorrect,判断是否相等for (int i = 0; i < exercises.size(); i++) {
//                获取运算数字前面的式子,去掉等号后面String exercise=exercises.get(i).split("=")[0];
//                获取答案String answer=answers.get(i);
//                判断if(isCorrectAnswer(exercise,answer)){correct.add(i+1);}else {wrong.add(i+1);}}
//            将结果写入文件中writeGradeFile(correct,wrong);} catch (IOException e) {throw new RuntimeException(e);}}private static boolean isCorrectAnswer(String exercise, String answer) {String[] exercises=new String[2];boolean flag=false;for (int i=0;i<exercise.length();i++){if(exercise.charAt(i)=='+') {exercises=exercise.split("\\+");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1+num2==answers) flag=true;break;}else if(exercise.charAt(i)=='-'){exercises=exercise.split("-");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1-num2==answers) flag=true;break;} else if (exercise.charAt(i)=='*') {exercises=exercise.split("\\*");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1*num2==answers) flag=true;break;}else if(exercise.charAt(i)=='/'){exercises=exercise.split("/");int num1=isNum(exercises[0]);int num2=isNum(exercises[1]);int answers= Integer.parseInt(answer);if(num1/num2==answers) flag=true;break;}}return flag;}private static int  isNum(String number) {int num= Integer.parseInt(number);return num;}//    读入文件的重写private static List<String> readFile(String filePath) throws IOException {List<String> lines=new ArrayList<>();try (BufferedReader reader = new BufferedReader(new FileReader(filePath))){String line;while ((line = reader.readLine())!=null){lines.add(line);}}return lines;}private static void writeGradeFile(List<Integer> correct, List<Integer> wrong) throws IOException {try (PrintWriter writer = new PrintWriter("Grade.txt")) {writer.println("Correct: " + correct.size() + " (" + listToString(correct) + ")");writer.println("Wrong: " + wrong.size() + " (" + listToString(wrong) + ")");}}private static String listToString(List<Integer> list) {return String.join(", ", list.toString().replaceAll("[\\[\\]]", ""));}`




项目小结
1.先生成10个例子,只实现加法
2.逐步完善,实现四则运算
3.随机生成四则运算
4.更改四则运算个数
5.写进文档
6.从外部导入文件路径,判断其中的个数
7.写算法,逐个判断文件中的算数表达式与答案
8.将判断结果写入文档
9.逐个测试

团队合作心得:

第一次结对项目还是完成的不是很理想,一开始两个人一起讨论思路总是有出入,总是不统一,到后来统一之后,代码方面两个人也是有很多的歧义,总不如一个人来的好,但最终还是求同存异,完成了这一个结对项目,也加强了彼此的团队团结意思。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/804845.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一次结对作业102202106王强

第一次结对作业之需求分析和原型设计这个作业属于哪个课程 首页 - 软件工程2024 - 福州大学 - 班级博客 - 博客园这个作业要求在哪里 2024秋软件工程结对作业(第一次之需求分析和原型设计) - 作业 - 软件工程2024 - 班级博客 - 博客园这个作业的目标 结对作业,进行需求分析和…

C++ 容器赋值运算符

▲ 《C++ Primer》 P302

第34章 货币政策和财政政策对总需求的影响

货币政策如何影响总需求 对美国经济来说,总需求曲线向右下方倾斜的最重要原因是利率效应。流动性偏好理论(theory of liquidity preference):凯恩斯提出的理论,认为利率的调整会使货币供给与货币需求达到平衡第一部分 货币供给 货币供给量由美联储的政策所固定,因此它不取…

标准库之 datetime和time 模块

一、time 模块 time模块是Python标准库中最基础、最常用的模块之一。它提供了各种处理时间的方法和函数,如获取当前时间、格式化时间、计算时间差等。time模块大部分函数的底层实现是 C 语言库的时间处理函数。 1.1、获取时间相关函数 1.1.1、time.time()函数 时间戳是指格林威…

一次实践:给自己的手机摄像头进行相机标定

记录了一次给自己的手机摄像头进行相机标定的技术实践。目录1. 问题引入2. 准备工作2.1 标定场2.2 相机拍摄3. 基本原理3.1 成像原理3.2 畸变校正4. 标定解算4.1 代码实现4.2 详细解析4.2.1 解算实现4.2.2 提取点位4.3 解算结果5. 问题补充 1. 问题引入 不得不说,现在的计算机…

第33章 总需求与总供给

衰退(recession):真实收入下降和失业增加的时期 萧条(depression):严重的衰退关于经济波动的三个关键事实经济波动是无规律的且不可预测的 大多数宏观经济变量同时波动 随着产量的减少,失业增加解释短期经济波动 古典经济学:古典二分法和货币中性。货币供给的变动影响名…

ISO/IEC/IEEE 29119-1:2022(E) 系统与软件工程软件测试第1部分:概念和定义

0 前言 国际标准化组织(ISO the International Organization for Standardization)和国际电工委员会(IEC the International Electrotechnical Commission)构成了世界标准化的专门体系。作为国际标准化组织或国际电工委员会成员的国家机构通过各自组织设立的技术委员会参与…

软件工程2024第一次结对作业

这个作业属于哪个课程 fzu-se2024这个作业要求在哪里 要求这个作业的目标 学习软件开发的前期过程,构建软件工程雏形学号 102201331队友施靖杰 102201327 使用工具:墨刀 原型(SkillBridge)链接《构建之法》学习 第三章 软件工程师的成长 1.IC在团队中的开发流程通过交流、实…

不同batch_size性能分析、MeshAnything论文

1、不同batch_size时运行train_segmentor.py的cpu、gpu、内存使用情况和batch_size性能分析 任务管理器cpu、gpu参数Windows 11最新版:任务管理器性能参数详解,什么是分页缓冲池和句柄-CSDN博客batch_size cpu利用率 gpu [专用、共享、GPU内存] iter用时(s) iters / epoch me…

开发一个flutter app

重新开启了flutter学习,因为一个大创项目 很对不起王建民主任,教导的软件需求知识,我完全没有用到。 首先配置环境 需要用android studio 自己用idea一直出错。所以一定要选择用android studio ,随便在网上找个教程就可以了 在android 中 build.gradle 添加以下代码 确保ap…

哔咔漫画最新版2024下载官网版-哔咔漫画2024最新版本永久免费v2.2.1.3-百步下载

哔咔漫画简介:在当今这个数字化日益发展的时代,二次元文化已经成为许多年轻人的精神食粮之一。哔咔漫画App,作为一款集成了大量正版漫画资源的移动应用,凭借其丰富的内容、优质的用户体验和便捷的操作方式,迅速成为了漫画爱好者们的首选平台。本文将带你深入了解哔咔漫画A…

作业1

课程:https://edu.cnblogs.com/campus/fzu/2024C 作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13264 学号:102300127总结与思考:沒什麼問題