zoukankan      html  css  js  c++  java
  • 第三次作业:个人项目-小学四则运算 “软件”之初版

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

    我的github远程仓库的地址:https://github.com/LiuQSong/learnning

    第一部分:要求

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

    23 - 3 * 4 = 11


    第二部分:个人软件过程耗时估计与统计表

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

     第三部分:软件设计与实现

         设计思想:把运算式的显示和运算结果的计算分别写在两个方法里面,之后用一个产生随机数的方法把它们绑定在一起,实现计算结构和计算式的统一,避免负数结果就用判断语句,做题次数则使用循环语句,而运算式中的运算符与运算符号的使用都是用选择判断语句(switch)实现。

        实现代码:  

     public static void main(String[] args){
            int times=0;       //用户输入题数
            int flag=0;    //记录正确题数
            double answer=0;     //用户输入的答案
            double percent=0;     //正确率
            Scanner inputNumber = new Scanner(System.in);
            Scanner answer1 = new Scanner(System.in);
            System.out.println("请输入题数:");
            times = inputNumber.nextInt();
            for(int i=0;i<times;i++)
            {
                double corret;
                do {
                     corret = timu();
                }while (corret<0);
                answer = answer1.nextDouble();
               if(answer==corret){
                   System.out.println("回答正确");
                   flag=flag+1;
               }
               else{
                   System.out.println("回答错误,正确答案是:"+corret);
               }
            }
            percent=(double)flag/times*100;
            System.out.println("正确率为:"+percent+'%');
    
        }

    使用do-while来避免得到负数,用for循环执行要求次数,创建一个方法timu()显示算式并返回一个double类型的运算结果并且赋予给corret,判断是否负数,负数就再执行一次,用corret与用户输入的值进行比对看是否正确。

    public  static double timu(){
            int sign1 =(int)(Math.random()*3); //产生1-4的随机数 运算符号1
            int sign2 =(int)(Math.random()*3); //产生1-4的随机数  运算符号2
            int  x=1+(int)(Math.random()*99);
            int  y=1+(int)(Math.random()*99);
            int  z=1+(int)(Math.random()*99);
            String result="";
            double result1=0;
            result=count(x,y,z,sign1,sign2);
            result1=count1(x,y,z,sign1,sign2);
            if(result1>=0) {
                System.out.println(result + "=? (答案保留一位小数)");
            }
            return result1;
        }

    使用一个方法来产生随机数并且绑定算式与结果,并且在该方法显示题目,返回正确结果,而这里if语句防止得到负数从而再次执行时显示出算式。

        public  static String count(int x,int y,int z,int sign1,int sign2){
            String result="";
            String sign3="";
            String sign4="";
            sign3=sign4;
            sign4=sign3;
            String x1 = String.valueOf(x);
            String y1 = String.valueOf(y);
            String z1 = String.valueOf(z);
            switch(sign1){
                case 0:sign3="+";break;
                case 1:sign3="-";break;
                case 2:sign3="x";break;
                case 3:sign3="/";break;
                default:sign3="+";
            }
            switch(sign2){
                case 0:sign4="+";break;
                case 1:sign4="-";break;
                case 2:sign4="x";break;
                case 3:sign4="/";break;
                default:sign4="+";
            }
            result=x1+sign3+y1+sign4+z1;
            return result;
        }
        public  static double count1(int x,int y,int z,int sign1,int sign2){
            double result=0;
             ....
            String test =new DecimalFormat("0.0").format(result);
            result = Double.valueOf(test);
            return result;
        }
    }

    传入相同的值给count与count1,使得算式与结果一致,count得到算式,count1得到结果,count1执行计算。

    执行结果:

    :


     第四部分:遇到的问题与总结

        遇到的问题:

        (1)我在编程该程序的时候参考了一下网上的算法,发现他们都是用出栈入栈进行运算优先级的处理与总体运算,而我一开始没有计划到这样做,只好一条路走到黑,痛点在运算方法count1()太过木讷,只能靠运算的规格不大才用这种多个if语句执行各种运算情况。

        (2)怎么处理小数让用户输入的和程序产生的结果得到统一,后来我使用

     String test =new DecimalFormat("0.0").format(result);
            result = Double.valueOf(test);
    
    

     这种方法进行保留一位小数,先得到保留一位小数的字符型test先得到保留一位小数的字符型test,然后再转成浮点数赋予result。

        总结:   

       使用的时间比预想使用的多了16分钟,其实我以为本来会更少的,没想到比想像中的难,也有自己基础不扎实的原因,我更深刻地了解到编程需要不断专研不断锻炼才能得心应手。在日后的编程学习生活里面我会更加努力。

     

       

  • 相关阅读:
    R语言做文本挖掘 Part4文本分类
    在VS2005中使用原来的IIS调试Web程序(像VS2003一样)
    “提高一下dotnet程序的效率一”中关于exception的问题
    asp.net Cookies 转码的问题 中文丢失
    静态构造函数
    js在firefox中的问题
    模板引擎的一种实现
    .NET面试题,看看你的水平[转]
    转载 软件架构师应该具备的素质(Enterprise Solution Architects and Leadership)
    用正则表达式提取url中的Querystring参数
  • 原文地址:https://www.cnblogs.com/lqscmz/p/9758812.html
Copyright © 2011-2022 走看看