标签:padding writer package str 工作量 error 自动生成 eve show
一、需求分析
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
二、功能设计
基本功能: 1.题目数量可定制
2.二则和四则运算可选
3.操作数数值范围可控
4.操作数是否含负数
5.重复算式可过滤
三、设计实现
本次设计只用到一个主类,其中包含了主方法和其他方法共同实现程序的相关功能
。判断是否需要负数的方法
。判断是否需要包含乘除的方法
。获取算式得数的方法
。主方法
四、测试运行
五、代码片段
package math;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class SuanShi {
public static void main(String[] args) {
try { Scanner sc = new Scanner(System.in);
System.out.println("这是一个自动生成四则运算试题的程序。接下来请选择相关的参数。");
System.out.println("请输入要生成题目的数量(数量>1)");
int num = sc.nextInt();
System.out.println("请选择是否包含乘除法(包含请输入1,不包含请输入0)");
int LevelFlg = sc.nextInt();
System.out.println("请选择结果是否包含负数(包含请输入1,不包含请输入0)");
int MinusFlg = sc.nextInt();
System.out.println("请选择结果的最大范围(比如100,200,1000)");
int maxNumFlg = sc.nextInt(); //生成对象,然后调用它的方法
SuanShi SuanShi=new SuanShi();
List<Equation> from = new ArrayList<Equation>(); //调用生成算式的程序,参数分别为 题目数量,是否含有乘除法,是否含有负数,最大的结果范围
from = SuanShi.createEquation(num,LevelFlg,MinusFlg,maxNumFlg); //在控制台上展示算式
SuanShi.showEquation(from); //将算式保存到文件中
SuanShi.saveEquation(from);
} catch (Exception e){
System.out.println("Error!" + e);
System.exit(0); } } // 生成算式
public List<Equation> createEquation(int num , int LevelFlg,int MinusFlg,int maxNumFlg) {
List<Equation> from = new ArrayList<Equation>(); //通过一个死循环来循环生成算式,然后检查是否符合条件,将满足条件的算式添加到list中,满足数量后跳出循环
while(true) { Random rand = new Random();
int operator = rand.nextInt(LevelFlg == 1 ? 4 : 2) + 1;// 是否乘除可控
int numA = rand.nextInt(maxNumFlg) + 1;
int numB = rand.nextInt(maxNumFlg) + 1; //将生成的算式放入对象中
Equation equation = new Equation(numA,numB,operator); //检查生成的竖式符合条件吗
if(check(from,equation,MinusFlg,maxNumFlg)) { // 将产生的并且通过检查的算式添加到List集合中
from.add(equation); }; //满足最大数量num后跳出循环
if(from.size()>=num) break;
}
return from;
}
// 在控制台上展示算式
public void showEquation(List<Equation> from) {
System.out.println("结果如下:");
for(int i=0;i<from.size();i++) {
System.out.println(from.get(i).printAnswer());
}
}
// 保存算式
public void saveEquation(List<Equation> from) {
BufferedWriter bufferedWriter = null;
String path = "D:\\homework\\result.txt" ;
try{ File file = new File(path);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
} file.createNewFile(); // 获取该文件的缓冲输出流
bufferedWriter = new BufferedWriter (new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); // 写入信息
bufferedWriter.write("以下为本次程序生成的试题,共有"+from.size()+"道题\r\n");
for (int i=0;i<from.size();i++) { //依次写入本地文件中 bufferedWriter.write(i+1+". "+from.get(i).printAnswer()+"\r\n");
} bufferedWriter.flush();// 清空缓冲区 bufferedWriter.close();// 关闭输出流
System.out.println("文件保存完毕!");
}catch (IOException e) { e.printStackTrace();
}finally { } } //检查生成的算式是否正确。
public boolean check(List<Equation> from, Equation equation,int MinusFlg,int maxNumFlg) {
boolean result = true; //判断新生成的算式是否超过最大范围
if(equation.getResult()>maxNumFlg) result = false; //判断新生成的算式是否有负数
if(MinusFlg==0 &&equation.getResult()<0) result = false; //判断新生成的算式是否和以前的重复
for(int i=0;i<from.size()-1;i++) {
if(from.get(i).getNumA()==equation.getNumA()
&&from.get(i).getNumB()==equation.getNumB()
&&from.get(i).getOperator()==equation.getOperator()) result = false;} //输出通过检查的算式
return result;
} }
六、总结
通过本次练习,学到了许多知识。经过一步步需求分析到功能的一步步实现,虽然编写过程中有很多地方不清楚,但通过网上查找和询问他人慢慢的弄明白了,收获颇多。
七、PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
20 |
25 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
20 |
Development |
开发 |
300 |
480 |
·· Analysis |
需求分析 (包括学习新技术) |
10 |
20 |
· Design Spec |
· 生成设计文档 |
0 |
0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
10 |
15 |
· Design |
具体设计 |
15 |
20 |
· Coding |
具体编码 |
300 |
420 |
· Code Review |
· 代码复审 |
10 |
10 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
10 |
20 |
Reporting |
报告 |
10 |
15 |
·· Test Report |
· 测试报告 |
15 |
20 |
· Size Measurement |
计算工作量 |
0 |
0 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
10 |
20 |
标签:padding writer package str 工作量 error 自动生成 eve show
原文地址:https://www.cnblogs.com/GXTSTAY/p/11522820.html