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

本文分享了一个基于命令行的小学四则运算题生成器的实现过程,详细介绍了设计思路、关键代码及运行结果。该软件能根据用户输入生成指定数量的运算题目,支持多种运算符组合,并具备答案校验功能。

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

我的github仓库地址:https://github.com/xichen1602/FourArithmetic

一、题目要求:

  • 任务:

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

  • 具体要求:

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

    23 - 3 * 4 = 11

  • 扩展要求:

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

    2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。

    初步拟定要实现的功能后,估计一下自己需要花多长时间。编程过程中记录自己实际用了多长时间。

    然后和同学们比较一下各自程序的功能、实现方法的异同等等。

写博客纪录自己实现的过程和思路。

二、设计

  • 1、类:
    FourArithmeticOperation(主类),Random(生成随机数、随机运算符)
  • 2、思路:

    通过输入的题目数目,产生相应的题目,调用随机函数产生操作数和操作符,每产生一道题目,对用户输入的结果进行判断,最终评分。

    三、运行结果和关键代码

  • 运行结果截图:
    1480612-20181015125925607-1124698300.png
  • 关键代码:
//产生题目
 switch (randomOperator1){//判断第一个操作符
        case "+":
            switch (randomOperator2){//判断第二个操作符
                   case "+":
                         result=(float)(num1+num2+num3);
                            System.out.print(num1+"+"+num2+"+"+num3+"=");//显示题目
                            inputAnswer=scanner.nextFloat();//待输入
                            check(inputAnswer,result,countFormat);//检查输入答案并给分数
                            break;
                        case "-":
                            while ((num1+num2)-num3<0){
                                num3=random.randomNumber();
                            }
                            result=(float)(num1+num2-num3);
                            System.out.print(num1+"+"+num2+"-"+num3+"=");
                            inputAnswer=scanner.nextFloat();
                            check(inputAnswer,result,countFormat);
                            break;
                        case "*":
                            result=(float)(num1+num2*num3);
                            System.out.print(num1+"+"+num2+"*"+num3+"=");
                            inputAnswer=scanner.nextFloat();
                            check(inputAnswer,result,countFormat);
                            break;
                        case "/":
                           if(num3==0){//除数不为0,若为0置为1
                            num3=1;
                          }
                           result=num1+(float)num2/num3;
                           System.out.print(num1+"+"+num2+"/"+num3+"=");
                           inputAnswer=scanner.nextFloat();
                           check(inputAnswer,result,countFormat);
                           break;
                    }
                    break;            
//判断输入并累计分数
public static void check(float answer, float result, float countFormat){
        if(Math.abs(answer-result)<0.01){//输入的答案和正确结果相差的绝对值不超过0.01即为正确
            System.out.println("答对了!");
            score= (int) (score+countFormat*100);
        }
        else {
            System.out.println("答错了,正确答案是:"+String.format("%.2f",result));//格式化正确结果,保留两位小数
        }
    }

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

PSP模版表格:

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

五、总结

本次四则运算初版项目,主要遇到的问题是数据之间的转换,特别是整形和浮点型数据,处理不当会丢失精度,这个过程还是需要细心的。实现效果是产生两个运算符,主要实现方式简单粗暴:采用switch嵌套判断。虽然基本实现了功能,但是目前还不能处理分数类型以及不能随机产生三位以上的操作符,所以后续还需要完善。另外,模块化设计做的不好,没能体现“面向对象”的特点,代码冗余较多,也需后续优化。

转载于:https://www.cnblogs.com/Xi-Chen00/p/9789935.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值