源码在Github的仓库主页链接地址:https://github.com/mazhongshan/Demo
1.需求分析:
(1),产生的题目数量要手动输入;
(2),数字大小在0-100之间;
(3),运算符至少3个;
(4),算式中不能出现分数和负数;
(5),题生成后,学号,练习题及答案输出到result.txt;
2.功能设计:
(1),产生随机数(调用random()函数);
(2),产生随机符号(“+”,“-”,“*”,“/”);
(3),分数的处理;
(4),负数的处理;
(5),等式的输出(调用FileOutputStream()函数和PrintStream()函数,将生成的等式输出到result.txt文件中);
3.设计实现:
(1),调用Math包中的random()函数产生随机数,但随机数在0-1之间,故Math.random()*100+1;加1是为了让产生的随机数中没有零,更好的处理;
(2),调用FileOutputStream()函数和PrintStream()函数将生成的等式放在result.txt文件中。
(3),
4.测试运行(截图):
5.核心代码:
package cn.mzs.longteng.test; /* * 在本次程序设计过程中遇到了很多问题。比如0-100的随机数如何产生; * 如何处理负数的问题; * 还有处理除数为零及算式结果不能为小数的问题; * 还有符号之间的选择; * 为了处理算式运算过程中不能产生小数。又因本人能力有限,设计的程序大大降低了出题的随机性。 */ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Scanner; public class Main { int a, b, c, d, e, f, m; static int n; int[] s = new int[n]; String[] st = new String[n]; String[] ts = new String[n]; public Main() { } // 产生随机数和运算: public void Num() throws FileNotFoundException { FileOutputStream os = new FileOutputStream(new File("src/cn/mzs/longteng/test/result.txt")); PrintStream p = new PrintStream(os); p.println("201571030322"); p.println("----------------------------"); for (int k = 0; k < n; k++) { a = (int) (Math.random() * 100 + 1); b = (int) (Math.random() * 100 + 1); c = (int) (Math.random() * 100 + 1); e = (int) (Math.random() * 10 + 1); m = (int) (Math.random() * 6); d = m * e; f = (int) (Math.random() * 3); if (f == 0) { s[k] = a * b - d / e + c; // 处理负数; if (a * b - d / e >= 0) { ts[k] = a + "*" + b + "-" + d + "/" + e + "+" + c + "="; st[k] = a + "*" + b + "-" + d + "/" + e + "+" + c + "=" + s[k]; System.out.println(ts[k] + "\n"); } else { s[k] = d / e - a * b + c; ts[k] = d + "/" + e + "-" + a + "*" + b + "+" + c + "="; st[k] = d + "/" + e + "-" + a + "*" + b + "+" + c + "=" + s[k]; System.out.println(ts[k] + "\n"); } } else if (f == 1) { s[k] = a + b * d / e - c; // 处理负数; if (b * d / e - c >= 0) { ts[k] = a + "+" + b + "*" + d + "/" + e + "-" + c + "="; st[k] = a + "+" + b + "*" + d + "/" + e + "-" + c + "=" + s[k]; System.out.println(ts[k] + "\n"); } else { s[k] = c - b * d / e + a; ts[k] = c + "-" + b + "*" + d + "/" + e + "+" + a + "="; st[k] = c + "-" + b + "*" + d + "/" + e + "+" + a + "=" + s[k]; System.out.println(ts[k] + "\n"); } } else if (f == 2) { s[k] = d / e - a * c + b; // 处理负数; if (d / e - a * c >= 0) { ts[k] = d + "/" + e + "-" + a + "*" + c + "+" + b + "="; st[k] = d + "/" + e + "-" + a + "*" + c + "+" + b + "=" + s[k]; System.out.println(ts[k] + "\n"); } else { s[k] = a * c - d / e + b; ts[k] = a + "*" + c + "-" + d + "/" + e + "+" + b + "="; st[k] = a + "*" + c + "-" + d + "/" + e + "+" + b + "=" + s[k]; System.out.println(ts[k] + "\n"); } } p.println(st[k] + "\n"); } p.println("-----------------------------"); p.close(); } public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.println("请输入要输入多少道题"); n = input.nextInt(); System.out.println("\n"); System.out.println("201571030322"); System.out.println("===================="); Main a = new Main(); a.Num(); System.out.println("===================="); } }
6.总结:
本次实验中,我学到了很多,收获很大,以前我觉得四则运算这种题目应该比较简单,但是经过动手实践,发现了很多问题;而这些问题以前是我没有发现的;以前写代码就是简单的写代码,但是这次不同,边写代码边想问题,边画流程图;让我受益很多。最让我在这次实验中的收获就是:不管是简单的项目还是复杂的项目都应该动手去实践,而不是凭空去想象。有一种“实践是检验真理的唯一标准”的感觉。
7.psp:
PSP2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成的时间(min) |
planning | 计划 | 20 | 40 |
Estimate | 估计这个任务需要多少时间 | 30 | 45 |
Development | 开发 | 100 | 105 |
Analysis | 需求分析 | 8 | 10 |
Design Spec | 生成设计文档 | 8 | 19 |
Design Review | 设计审查 | 5 | 5 |
Coding Standard | 代码规范 | 14 | 9 |
Design | 具体设计 | 20 | 31 |
Coding | 具体编码 | 60 | 89 |
Code Review | 代码复审 | 38 | 15 |
Test | 测试(自我测试,修改代码,提交修改) | 8 | 10 |
Reporting | 报告 | 16 | 14 |
Test Report | 测试报告 | 10 | 13 |
Size Measurement | 计算工作量 | 4 | 6 |
Postmortem & Process Improvement |
事后总结 | 10 | 12 |
源码在Github的仓库主页链接地址:https://github.com/mazhongshan/Demo