201571030121 《四则运算》
Github地址:https://github.com/yuanerss/szys
项目要求
1、需求分析
- 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
- 练习题生成好后,将学号
- 当程序接收的参数为4时,以下为输出文件示例。
4、测试运行
ECLIPSE测试:
cmd窗口测试:
5、核心代码
运算优先级部分代码
public static boolean ys() { while (true) { fNum = generateRandomNum(1, 99); sNum = generateRandomNum(1, 99); tNum = generateRandomNum(1, 99); firstOperator = OPERATOR[generateRandomNum(0, 3)]; secondOperator = OPERATOR[generateRandomNum(0, 3)]; if (firstOperator.equals(secondOperator)) { continue; } try { if (secondOperator.equals(Const.Operator.multiplication) || secondOperator.equals(Const.Operator.division)) { int preResult = ys(sNum, tNum, secondOperator); if (preResult < 0) { continue; } result = ys(fNum, preResult, firstOperator); } else { int preResult = ys(fNum, sNum, firstOperator); if (preResult < 0) { continue; } result = ys(preResult, tNum, secondOperator); } } catch (Exception e) { // TODO: handle exception continue; } if (result < 0) { continue; } else { StringBuffer buffer = new StringBuffer(); buffer.append(fNum).append(firstOperator).append(sNum).append(secondOperator).append(tNum) .append("=").append(result).append("\n"); System.out.println(buffer); if (writeToFile(buffer.toString())) { return true; } else { return false; } } } }
主函数部分
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import java.util.Scanner; public class four { private static int fNum, sNum, tNum, result; private static String firstOperator, secondOperator; private final static String[] OPERATOR = { "+", "-", "*", "/" }; private static int ac=1; public static void main(String[] args) { System.out.println("请输入产生题目数量:"); Scanner s = new Scanner(System.in); int a=s.nextInt(); for (int i = 0; i < a; i++) { ys(); } }
输出到文件部分
public static boolean writeToFile(String result) { try { File f1 = new File("result.txt"); FileWriter fw = new FileWriter(f1, true); PrintWriter pw = new PrintWriter(fw); if(ac==1) { pw.println("201571030121"); ac=0; } pw.println(result); fw.flush(); fw.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; } }
运算部分
public static Integer ys(int firstNum, int secNum, String operator) throws Exception{ switch (operator) { case Const.Operator.add: { return firstNum + secNum; } case Const.Operator.subtraction: { return firstNum - secNum; } case Const.Operator.multiplication: { return firstNum * secNum; } case Const.Operator.division: { if (firstNum % secNum == 0) { return firstNum / secNum; } else { throw new Exception(""); } } default: { return null; } } } }
6、psp展示
PSP2.1 |
任务内容 |
计划完成需要的时间(h) |
实际完成需要的时间(h) |
Planning |
计划 |
0.5 |
1 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
0.5 |
1 |
Development |
开发 |
19 |
24 |
·· Analysis |
需求分析 (包括学习新技术) |
5 |
6 |
· Design Spec |
· 生成设计文档 |
1 |
1 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0.2 |
0.2 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
0.2 |
0.2 |
· Design |
具体设计 |
0.6 |
0.6 |
· Coding |
具体编码 |
10 |
12 |
· Code Review |
· 代码复审 |
0.5 |
0.5 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
2 |
4 |
Reporting |
报告 |
0.8 |
1 |
·· Test Report |
· 测试报告 |
0.3 |
0.4 |
· Size Measurement |
计算工作量 |
0.2 |
0.2 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
0.3 |
0.4 |
7、总结
在刚开始写这个程序的时候没有设计好具体的逻辑规律,导致第一份四则运算代码破产(第一次输入次数与输出的方程式相等,后再次运行则不跟输入次数相等,反复求证和询问最后等到原因是逻辑结构错误,所以重新写了份代码)
第二次写的时候参照网上的一些关于四则运算的好的方法结构,反思之后构建了现在代码的逻辑。
第二次写的时候波折也很多,关于小数的判断、负数的处理等等,都困扰了很长时间,但是功夫不负有心人拿出“只要功夫深铁杵磨成针”的信念最后终于顺利的解决了,期间也参考了博客园很多学校里同学们的博客,收获颇丰。
这次实验也还是有点小小遗憾就是等式只能3个运算符,不能加入()。