第三次作业

本博客介绍了一个能够自动生成小学四则运算题目的软件初版,该软件使用Java编程,通过随机生成算式并利用正则表达式处理运算优先级,实现了题目生成、用户输入处理与自动评分功能。

个人项目-小学四则运算 “软件”之初版

作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166

github仓库:https://github.com/Galuowa/myrepository

一、题目要求:

   像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。

        具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:如:23 - 3 * 4 = 11。

  扩展要求:

  1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。

  2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。初步拟定要实现的功能后,估计一下自己需要花多长时间。编程过程中记录自己实际用了多长时间。然后和同学们比较一下各自程序的功能、实现方法的异同等等。写博客纪录自己实现的过程和思路。

二、个人软件过程耗时估计与统计表

PSP2.1Personal Software Process StagesTime Senior Student(h)Time(h)
Planning计划 1 1
Estimate估计这个任务需要多少时间 10 12
Development开发 48 70
Analysis需求分析 (包括学习新技术) 6 12
Design Spec生成设计文档 1 1
Design Review设计复审 3 6
Coding Standard代码规范 1 3
Design具体设计 2 3
Coding具体编码 2 3
Code Review代码复审 1 2
Test测试(自我测试,修改代码,提交修改) 1 2
Reporting报告 1 1
 测试报告 1 1
 计算工作量 1 1
 并提出过程改进计划 1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、代码实现

  1. 首先让用户输入题目的数目,根据用户输入的题目数用for循环生成题目。
  2. 用Random方法随机生成100以内的正整数、运算符和运算符的数量,然后将这些数和运算符组成一个字符串,这个字符串就是一个题目。
  3. 用正则表达式将字符串题目进行运算符优先级的检索,“*"和“/”优先计算。
  4. 将结果返回,然后跟用户输入的答案进行比较,然后根据总题目数跟答对的题目进行评分。

部分代码:

 
 
 1 Scanner scanner = new Scanner(System.in);
 2 System.out.print("请输入四则运算题目的个数(大于0):");
 3 int Enum = scanner.nextInt();
 4 String num = "0";
 5 int trueNum = 0;
 6 Calculator cal = new Calculator();
 7 for (int i = 0; i < Enum; i++) {
 8      num = Create();;
 9      double result = arithmetic(num);
10      if (result < 0) {
11         i--;
12         continue;
13      }
14      Scanner scannerMul = new Scanner(System.in);
15      System.out.print(num+"=");
16      float resultMul = scannerMul.nextFloat();
17      if (resultMul != result) {
18         System.out.println("错误!正确答案为" + result);
19     } else {
20          System.out.println("正确!");
21          trueNum++;
22     }
23 }
24 System.out.println("总共"+Enum+"题,答对"+trueNum+"题,一共获得"+(100*trueNum/Enum)+"分。(总共100分)");
25 注:具体代码,请到github上查看。
 
 

 

 

结果测试:

四、遇到的问题及如何解决的

  遇到的问题:把题目保存成字符串的方法虽然很好,但是字符串的题目却存在运算式优先级的问题,如果直接把字符串进行运算,就只能从左往右那样运算,这样就会出现运算结果不对的情况。

  如何解决:可以用正则表达式的方法将“*”和“/”筛选出来最先进行运算,因为正则表达式可以筛选出匹配要求的第一个表达式,所以它既符合从左往右的要求,也符合运算式优先级的优先运算要求。

转载于:https://www.cnblogs.com/Evariste-Galois/p/9763252.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值