软工第二次作业

                                        第二次作业熟悉使用工具

GIT地址 我的GIT地址
GIT用户名 peaceANDlove
学号后五位 61417
我的博客地址 点这里
作业链接 链接地址

Part1.配置基本环境

本来是打算用c++的,但是学的不太到位,各种语法基础还不熟练,就换成了java,虽然java学的也不算到位,但是毕竟也用过一段时间了,语法和一些基本的方法比较c++还是要熟悉一些。

基本过程

编译软件当然用现在最好用的idea
软工第二次作业_第1张图片

java环境配置推荐:java环境变量配置


Part2.阿超四则运算分析与编码过程

分析过程:

题目:

阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:


  • 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。

  • 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。

  • 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。

  • 当程序接收的参数为4时,以下为一个输出文件示例。

13+17-1=29
11*15-5=160
3+10+4-16=1
15÷5+3-2=4

分析:

由用面向对象的思维来分析题目的需求可以知道,我一共需要创建两个类;

  1.创建一个用于创建四则运算计算式的类
  2.创建一个用于计算计算式结果的类

需要注意的地方有;
  1.每次产生的运算符在2~3个之间
  2.计算式的数字在0到100之间
  3.练习题在运算过程中不得出现非整数

比较难的地方;
  需要用到逆波兰算法将计算式中的中缀表达式转换成后缀表达式,之后再用栈来计算后缀表达式的结果,期间还要控制计算的结果不能出现非整数。

编码过程:

经过一段时间的思考后,发现我想要单独的把这个四则运算程序写出来有些困难,以我现在的能力还有些欠缺,于是我就从网上查找相关的资料,发现了两个和我的想法比较接近的博客,所以下面的代码实在以下两篇博客的基础上进行了一些修改,不知道算不算是抄袭呢。
参考资料1:https://blog.csdn.net/cimixian/article/details/88853883
参考资料2:https://coding.net/u/wanghz499/p/2016012032week2-2/git/tree/master/src

1.用于创建计算式的方法


    public String createCalculation(){  //用于产生计算式的类,并把计算式封装成一个String类型的数据进行处理
        Random random = new Random();
        String[] operator = {"+","-","*","÷"};

        int operatorCount=2+random.nextInt(2); //产生的操作符的个数2~3个
        int num[] = new int[operatorCount+1]; //产生的操作数字的个数应当比操作符多一个
        int[] operatorIndex = indexs(operatorCount, 4);
        String s = new String();

        for(int j=0;j<=operatorCount;j++){
            num[j] = random.nextInt(101); //用于产生0~100范围内的整数
        }



        switch(operatorCount){ //这里是将计算式的格式给固定下来,以特定的格式进行创建计算式
            case 2: { //表示计算式里面只有两个运算符

                s = num[0] + operator[operatorIndex[0]] + num[1] +
                        operator[operatorIndex[1]] + num[2] ;
                break;
            }

            case 3:{ //表示计算式里面有三个运算符
                s=num[0]+operator[operatorIndex[0]]+num[1]+
                        operator[operatorIndex[1]]+num[2]+
                        operator[operatorIndex[2]]+num[3];
            }
        }

        s+="=";//给计算式加上等号
        Calculate calculate = new Calculate();
        int answer = calculate.count(s); //计算计算式的答案
        if(answer>=0){
            s+=answer;
        }else{
            return createCalculation(); //不符合条件的就重新创建计算式
        }

        return s;
     }

用于计算结果的代码以及部分工具代码我都是参考之前的两分参考资料里面的,在这里就不展示了。

主方法代码


    public class Main {

            public static void main(String[] args) {
            File file = new File("../result.txt");
            try (Writer out = new FileWriter(file)) {

                System.out.println("输入需要创建的题目数");
                Scanner sc = new Scanner(System.in);
                int count = sc.nextInt();
                CreateCalculation calculation = new CreateCalculation();
                for (int i = 0; i < count; i++) {
                    String s = calculation.createCalculation();
                    System.out.println(s);
                    out.write(s);
                    out.write("\r\n");
                }
                out.close();
                System.out.println("创建成功!");
            }catch (IOException e){
                e.printStackTrace();
                System.out.println("创建失败");
            }
    
        }
    }

运行结果图
软工第二次作业_第2张图片

软工第二次作业_第3张图片


Part3.Git使用流程

由于之前使用过git的基本操作,所以我是安装过git的,这里就不演示安装git教程。

推荐GIT安装使用教程:
https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496

我在这里演示使用gitgithub仓库中克隆项目过程
根据图示复制URL

软工第二次作业_第4张图片

在电脑本地选择合适的目录,安装好git后,在选定的文件夹中点击鼠标右键   git Base here

软工第二次作业_第5张图片

软工第二次作业_第6张图片
出现上面窗口后输入 git clone ,在输入之前复制的URL

软工第二次作业_第7张图片

这样,本地就会有对应的文件目录,再创建一个与自己github同名的文件夹就大功告成了。
软工第二次作业_第8张图片

接下来就是将之前写的代码推送到自己的仓库中了,当你用idea把项目文件建立在从github上克隆下来的文件夹后,idea软件会有pushpull的功能。
软工第二次作业_第9张图片

点击红色箭头所指的地方就可以提交到仓库中了。
软工第二次作业_第10张图片
然后登陆自己的github账号发现我所写的代码已经提交上去了。
软工第二次作业_第11张图片


Part4.单元测试

idea软件已经集成用于测试的组件Junit,所以只需对对应的单元创建测试类即可。

软工第二次作业_第12张图片


基本调试:
编写完代码后,我进行测试,一开始发现控制台打印的结果和我预期的想法相差甚远。
软工第二次作业_第13张图片

算出的结果总是等于最后一个计算数字,于是我想可以通过加断点的方式来看看问题出现在哪里
软工第二次作业_第14张图片

点击debug按钮后,我就可以在控制台观察变量的值,并判断出那些变量的值出现了异常
软工第二次作业_第15张图片

当调试到这个这个方法时,我发现for循环运行的次数和我预计的次数不同,仔细观察后发现,控制循环的变量i,i++了两次
软工第二次作业_第16张图片

调整之后,发现后台输出的结果和我的预期符合了。
软工第二次作业_第17张图片

Part5.做项目时自生的问题

1.本次项目遇到的最大的问题就是编码过程,虽然有一个基本的思路,但是不知道如何去实现,最后通过百度的方式一边读别人的代码,一边完善自己的项目,才完成了此次作业。

2.数据结构知识的欠缺,一看到需要计算四则运算,我就知道需要用到栈来实现相应的操作,但是实际操作起来,非常生硬,还容易出错,这是我今后需要加强的部分。

3.思考的欠缺,此次代码是在他人的基础上进行修改的,总的来说我只是在学习他人的思维,被他人引导着,缺乏自己独立的想法,虽然在原有的代码上进行一些修改,但是主要思路还是参照的他人的,这一方面也是需要在好好加强的。


Part6.项目小结


  通过本次小项目的整个流程,发现了自己的不足,尤其欠缺的是将需求分析转换成代码这个过程,一开始我是分析出来应该有哪些类,但是却不知到该如何用编码的方式去实现,其次是一些数据结构与算法的基础知识掌握的不够牢靠,所以用起来的时候往往是完成了这一步,不知道下一步该做些什么,总得来说就是代码量太少了,基础的知识掌握的也不够熟练,接下来的学习过程会重点强化这两个方面。本次项目收获十分大,发现了自己的不足,也学会了使用gitgithub来管理自己的代码。

你可能感兴趣的:(软工第二次作业)