GitHub项目地址: https://github.com/SmileZhbb/zhaohb
一、需求分析
- 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
- 练习题生成好后,将你的学号
- 扩展功能可以用:在算式中包含括号,计算存在真分数的式子。
二、功能分析
(1) 根据提示输入数字m(即要产生的式子个数)。
(2)输出学号且随机生成m个包含两个运算符的式子,计算结果。
(3)将运算结果输出到指定文件result.txt中。
三、设计思路和过程
(1) 键盘接收m,用random方法产生对应运算数的随机数和对应运算符的随机数;
(2)利用do_whie循环判断生成的随机数是否符合表达式的条件,如果符合准备产生算式,如果不符合重新生成。
(3)如果产生运算符的随机数为0,产生加法,赋值为question,计算出答案赋值为answer。随机数为1,产生减法,随机数为2,产生乘法,随机数为3,产生除法。
(4)将question和answer赋值给datasourse,利用WriteToFile write=new WriteToFile("result.txt",datasourse)输出结果。
四、运行结果
(1)在eclipse中运行代码如图所示:
(2) result.txt中显示如下:
五、核心代码
Scanner num =new Scanner(System.in);
System.out.print("请输入个数:");
m =num.nextInt();
ArrayList<String> datasourse=new ArrayList<String>();
String question=new String();
Random r = new Random();
Scanner in = new Scanner(System.in);
System.out.println("学号:201571030142");
for (int i = 1; i <= m; i++) {
// 随机生成题目question(包括数据和符号),计算答案answer
//String question = null;
int answer = 0;
int a, b, c,d;
c = r.nextInt(4);
do {
a = r.nextInt(100);
b = r.nextInt(100);
d = r.nextInt(100);
} while ((c == 3 && b == 0)
|| (c == 3 && a % b != 0)
|| (c == 2 && a * b > 100)
|| (c == 1 && a < b)
|| (c == 0 && a + b > 100));
if (c == 0) {
question = a + "+" + b +"+"+d;
answer = a + b + d;
} else if (c == 1) {
question = a + "-" + b+"+"+d;
answer = a - b + d;
} else if (c == 2) {
question = a + "*" + b+"*"+d;
answer = a * b * d;
} else {
question = a + "/" + b+"*"+d;
answer = a / b * d;
}
// 输出题目question
datasourse.add(question+"="+answer);
//System.out.println(i + ")"+ question + "="+answer);
}
将question和answer赋值给datasourse,写入result.txt。
for ( int i = 0; i < datasourse.size(); i++){
System.out.println(datasourse.get(i));
}
WriteToFile write=new WriteToFile(
"result.txt",datasourse);
System.out.println("已写入result.txt!");
六、小结
在本次实验设计中,发现了自己的很多不足:
(1)java基础知识点掌握不牢固,知识模糊,结构混乱。
(2)动手能力太差,面对一个问题,不知道如何去实现它,参考大量资料才完成此次作业。
(3)实验过程设计简单,部分功能不太完善。
在这次设计实验过程中,遇到了很多问题。这都是值得我反思的。为什么不知道这个结构?为什么老是出现bug?在今后的学习中,应当认真学习,
重新改进,在下一次的实验设计中,能够更好的完成。
学到的知识点:
java写入文件有三种方法:
FileWriter fileWritter = new FileWriter();
BufferedWriter bw = new BufferedWriter();
FileOutputStream写入文件
七、PSP
PSP2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 30 | 60 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 40 |
Development | 开发 | 240 | 600 |
Analysis | 需求分析 (包括学习新技术) | 20 | 20 |
Design Spec | 生成设计文档 | 20 | 30 |
Design Review | 设计复审 (和同事审核设计文档) | 20 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 60 |
Design | 具体设计 | 40 | 60 |
Coding | 具体编码 | 300 | 400 |
Code Review | 代码复审 | 20 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 40 |
Reporting | 报告 | 30 | 45 |
Test Report | 测试报告 | 10 | 20 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 5 | 8 |