20165326 四则运算-结对编程 总结

四则运算-结对编程 总结

一、需求分析
  • 能随机生成n道四则运算题目,n由使用者输入

  • 支持整数和分数

  • 支持多运算符

  • 能够判断正误,错误时能提醒并输出正确答案

  • 能计算出正确率

  • 能多次生成题目,直到使用者选择退出

  • 文件:
    • 处理生成题目并输出到文件
    • 完成题目后从文件读入并判题

      二、设计思路

      基于之前的工作,这一阶段的主要重心放在了生成txt文件,对文件进行输入输出等操作,此处设计了两个主类QuestionsResults分别实现这两个操作。输出题目放在Exercisies.txt中,结果放在ExercisesResults.txt中,实现在读入程序并修改后打开txt文件用以查看程序的运行结果。

      三、关键代码及解释
      :
      在程序中用记事本(可执行文件)打开Exercises.txt文件
      Process p=null;
      try {
              p=Runtime.getRuntime().exec("notepad.exe Exercises.txt");
          } catch (Exception e) {
              e.printStackTrace();
          }

从文件读入题目并判题

        Calculator jdg = new Calculator();//创建一个新的`Calculator`对象,进行计算
        NifixToSuffix nts = new NifixToSuffix();//创建一个`NifixToSuffix`对象,将中缀式转换为后缀式
        NumberFormat fmt = NumberFormat.getPercentInstance();//创建一个`NumberFormat`对象,将分数转换为百分数
        FileInputStream fis = new FileInputStream("Exercises.txt");//创建指向`Exercises.txt`文件的输入流
        InputStreamReader isr = new InputStreamReader(fis);//将isr定义为fis的上转型对象
        BufferedReader in = new BufferedReader(isr);//创建 `BufferedReader`流读取文本行
        StringTokenizer tokenizer1 = null, tokenizer2 = null;//创建`StringTokenizer`对象作分隔标记
        String token1, token2, token3, token4;
        String s1 = null;
        String str;
        int q = 0, count = 0;
        PrintStream ps = new PrintStream("ExercisesResult.txt");//创建指向`ExercisesResult.txt`的输出流
        while ((str=in.readLine()) != null) { //从`Exercises.txt`文件中读入文本行,文件中每个题目都是一行,且形式都为“题目n:表达式 =答案”。
            tokenizer1 = new StringTokenizer(str, ":");//以":"作为分隔标记
            token1 = tokenizer1.nextToken();//将":"前的内容赋给token1(“题目n”)
            token2 = tokenizer1.nextToken();//将":"后的内容赋给token2(“表达式 =答案”)
            tokenizer2 = new StringTokenizer(token2, "=");//以"="作为分隔标记
            token3 = tokenizer2.nextToken();//将"="前的内容赋给token3(“表达式”)
            token4 = tokenizer2.nextToken();//将"="后的内容赋给token4(“答案”)
            nts.conversion(token3);//将token3转化为后缀表达式
            if (token4.equals(jdg.evaluate(nts.getMessage()))) {//判断输入答案是否等于计算结果
                s1 = "正确!";
                q++;
            } else {
                s1 = "错误,正确答案为:" + jdg.evaluate(nts.getMessage());
            }

            String s2 = str + "\n" + s1 + "\n\n";
            ps.append(s2);//将题目及判断结果写入到`ExercisesResult.txt`文件中
            count++;
        }
:

        double accuracy = (double) q / count;
        String s3 = "完成" + count + "道题目,答对" + q + "道题,正确率为" + fmt.format(accuracy);//计算题目数目及正确率,将正确率转化为百分数。
        ps.append(s3);
四、测试方法

NifixToSuffer类方法的测试(中缀转后缀)

1296414-20180416003516879-517989662.png

Calculator类方法的测试(四则运算)

1296414-20180416170752350-534470508.png

RationalNumber类方法的测试(有理数及真分数的计算)

1296414-20180416170848297-134346838.png

五、运行过程截图

1296414-20180422165027569-1007935552.png

1296414-20180421233912706-1139811529.png

1296414-20180421233927475-877017799.png

六、代码托管

码云链接

1296414-20180422164607173-1448920407.png

七、遇到的困难及解决方法
  • Q1:在文本中计算统计正确率时,输出正确率都是0%,如下图:
    1296414-20180422001407067-262834890.png

  • 解决方法:仔细查看代码后,我们发现,在向文本中输入题目时,会在“=”后面多加了一个空格,导致在判断输入结果与计算结果时比较出现错误,将空格去掉后,就可以正常运算了。

八、结对评价

我的小伙伴还是一如既往的给力,我们在后期扩展需求的时候遇到了很多问题,通过查阅资料和结合往期的学习一一解决,我有很多不太理解的地方都是她耐心细致的讲解给我听,对我有很大的帮助。
小伙伴的博客链接www.cnblogs.com/sunxiaoxuan/p/8904613.html

九、结对照片

1296580-20180422172236812-834792299.jpg

十、PSP
PSP2.1Personal Software Process Stages预估耗时(小时)实际耗时(小时)
Planning计划
· Estimate· 估计这个任务需要多少时间11
Development开发
·Analysis·需求分析(包括学习新技术)1.54.5
·Design Spec·生成设计文档11.2
·Disign Review·设计复审(和同事审核设计文档)0.50.8
·Code Standard·代码规范11.5
·Design·具体设计1.52.5
·Coding·具体编码57
·Code Review·代码复审11.5
·Test·测试(自我测试,修改代码,提交修改)23
Reporting报告
·Test Report·测试报告1.52
·Size Measurement·计算工作量11
·Postmortem&Process Improvement Plan·事后总结,并提出过程改进计划11
合计1827
参考资料

2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算

结对编程项目-四则运算
现代软件工程讲义 个人项目和结对项目练习 四则运算

逆波兰算法实现四则运算

如何使用java程序打开一个文件?

转载于:https://www.cnblogs.com/Czzzz/p/8908353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值