20165312 结对学习 四则运算(第二周)

20165312 结对学习 四则运算(第二周)

代码托管

需求分析

  • 手动输入进行计算的题目数量n
  • 自动生成n道四则运算题目
    • 整数
    • 真分数
  • 进行判断对错,并计算正确率
  • 能多次进行计算,知道用户不想练习

    深层次需求分析

  • 进行多运算符计算
  • 随机生成的题目以及正确答案保存至一个文件
  • 完成题目后从文件读入并判题
  • 多语言支持:简体中文, 繁體中文, English
  • 生成题目去重
  • 将前缀表达式转化为后缀表达式

    相比上周本周的进步

  • 实现真分数的加减乘除运算
  • 分类实现程序,使不同的要求分类实现,使得变动代码时更容易
  • 完善代码UML图

    设计思路

实践过程中关键代码的解释

本程序除了测试类,共有四个类。

  • Calculate(主类)
  • Fraction(真分数的加减乘除运算)
  • IntNumber(整数的加减乘除运算)
  • Judgement(判断结果是否正确并且计算正确率)

我认为关键代码就是Fraction.java和IntNumber.java这两个类,对此我在代码中有相应的注释

Fraction.java

import java.util.Random;
public class Fraction { //除法加减乘除
    private int numerator, denominator; //分别是分子、分母
    public  Fraction (int numer, int denom) { //写成一个分数形式
        if(denom == 0 )   //分母为零
            denom = 1;
        if (denom < 0) {  //分母为负数
            numer = numer * -1;
            denom = denom * -1;
        }
        numerator = numer;
        denominator = denom;
        reduce();
    }
    public int getNumerator() {
        return numerator;
    }
    public int getDenominator() {
        return denominator;
    }
    public Fraction add(Fraction op2) { //加法
        int commonDenominator = denominator * op2.getDenominator();
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int sum = numerator1 + numerator2;
        System.out.print("("+this.toString()+")" + " + " + "("+op2.toString()+")" + "=");
        return new Fraction (sum, commonDenominator);
    }

    public Fraction subtract(Fraction op2) { //减法
        int commonDenominator = denominator * op2.getDenominator();
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int difference = numerator1 - numerator2;
        System.out.print("("+this.toString()+")" + " - " + "("+op2.toString()+")" + "=");
        return new Fraction(difference,commonDenominator);
    }

    public Fraction multiply (Fraction op2) { //乘法
        int numer = numerator * op2.getNumerator();
        int denom = denominator * op2.getDenominator();
        System.out.print("("+this.toString()+")" + " * " + "("+op2.toString()+")" + "=");
        return new Fraction (numer, denom);
    }

    public Fraction divide (Fraction op2) { //除法
        int numer = numerator * op2.getDenominator();
        int denom = denominator * op2.getNumerator();
        System.out.print("("+this.toString()+")" + " / " + "("+op2.toString()+")" + "=");
        return new Fraction (numer, denom);
    }
    public String toString() {
        String result;
        if (numerator == 0)
            result = "0";
        else if(denominator == 0)
            return "错误!分母不能为0";
        else if (denominator == 1)
            result = numerator + "";
        else
            result = numerator + "/" + denominator;
        return result;
    }
    private void reduce() {  //约去公因子
        if (numerator != 0) {
            int common = gcd (Math.abs(numerator), denominator);
            numerator = numerator / common;
            denominator = denominator / common;
        }
    }
    private int gcd (int num1, int num2) { //最大公因子
        if(num2==0)
            return num1;
        else
            return gcd(num2,num1%num2);

    }
    public static Fraction obj(){  //随机生成一个真分数的分子和分母
        Random ran = new Random();
        return new Fraction(ran.nextInt(100),ran.nextInt(100));
    }
}

IntNumber.java

import java.util.Random;
public class IntNumber { //整数加减乘除
    private int A;
    public IntNumber(int A){
        this.A = A;
    }
    public int add(IntNumber op1){ //加法
        int result = A + op1.A;
        System.out.print(A + " + " + op1.A + "=");
        return result;
    }

    public int subtract(IntNumber op1){  //减法
        int result = A - op1.A;
        System.out.print(A + " - " + op1.A + "=");
        return result;
    }

    public int multiply(IntNumber op1){ //乘法
        int result = A * op1.A;
        System.out.print(A + " * " + op1.A + "=");
        return result;
    }
    public String divide(Fraction op1){ //除法
        System.out.print(op1.getNumerator() + " / " + op1.getDenominator() + "=");
        return op1.toString();
    }
    public static IntNumber obj(){  //随机生成一个整数
        Random ran = new Random();
        return new IntNumber(ran.nextInt(100));
    }
}

这两个类有相应的测试类IntNumberTest.java和FractionTest.java,进行测试

测试方法

  • IntNumberTest.java

  • FractionTest.java

运行过程截图

对结对的小伙伴进行评价

我的小伙伴给了我想法,并且从一个旁观者的角度,测试代码,用边界情况测试,使得学习更加高效。不断磨合,默契度还是增加的,因为也是室友,所以学习的时间也比较好约定。

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 120
Estimate 估计这个任务需要多少时间 360 600
Development 开发 200 400
Analysis 需求分析 (包括学习新技术) 60 120
Design Spec 生成设计文档 30 45
Design Review 设计复审 (和同事审核设计文档) 30 120
Coding Standard 代码规范 (为目前的开发制定合适的规范) 40 150
Design 具体设计 50 40
Coding 具体编码 180 260
Code Review 代码复审 30 50
Test 测试(自我测试,修改代码,提交修改) 60 90
Reporting 报告 30 30
Test Report 测试报告 30 30
Size Measurement 计算工作量 30 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 120
合计 1250 2195

原文地址:https://www.cnblogs.com/cxgg/p/8910277.html

时间: 2024-11-09 14:15:02

20165312 结对学习 四则运算(第二周)的相关文章

20172316 结对编程-四则运算 第二周 阶段总结

20172316 结对编程-四则运算 第二周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 2.题目运算(判题) 3.支持真分数 4.生成题目添加括号 5.题目去重(扩展需求,加分项) 6.文件处理(扩展需求,自行学习,加分项) 相关过程截图 最开始的代码名称十分不规范,有的使用拼音,有的使用英文,有的不知所云,其他组员第一次看见名称时不容易理解和衔接起来: 出现了两个程序之间符号表示的差异,对于式子的值的计算有很大影响: 结对评价 唐才铭 王文彬 关键代码解

20165228 结对学习 四则运算(第二周)

20165228 结对学习 四则运算 本次红色为优化和添加部分 一.需求分析 题目生成 可独立使用 考虑可扩展支持配置生成不同难度的题目,比如通过参数指定: 题目合法性判断 测试生成题目的正确性 输入的合法性检测 题目运算(判断正误) 转换为后缀表达式 考虑支持不同的去重级别测试 题目生成测试 二.设计思路 1.首先我们按计算难度设定了不同的等级 level1: 100以内整数的加减运算 level2:50以内整数的乘除运算 level3:分数(分子和分母都取0-50范围以内的整数)的加减乘除

20172327 结对编程项目-四则运算 第二周 阶段总结

20172327 结对编程项目-四则运算 第二周 阶段总结 结对编程项目-四则运算 第二周 输出阶段总结博客 结对对象: 学号:20172317 姓名:蒋子行 伙伴第二周博客地址: 学号:20172320 姓名:李闻洲 伙伴第二周博客地址: 担任角色: 驾驶员:蒋子行 副驾驶:李闻洲 马瑞蕃 小组结对编程的photo: 项目中自己负责的部分: 我在项目中真的没啥贡献,项目主要由祥哥主刀,我和李闻洲就是打杂的. 个人贡献度划分: 我在项目中真的没啥贡献,项目主要由祥哥主刀,我就是打杂的,提点建议和

20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结

20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目(加.减.乘.除) 需要实现计算结果的输出 将正确的计算结果与用户输入的计算结果进行比较得出最终的正确率 之前编写的程序还有很多问题,这周主要对这些问题进行改进和升级,我们成功实现了这些功能. 设计思路 1. 首先我们需要编写随机生成数字和随机生成符号的代码,把他们编写好后保存 2. 我们需要利用之前编写好的随

20172312『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

20172312『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172315 20172318 姓名 :胡智韬 陆大岳 伙伴第一周博客地址: 对结对伙伴的评价:这俩人一开始各编各的还好,到后面就开始吵,从头吵到尾,陆大胖,胡志汪,还好到最后是把代码敲出来了,不容易不容易. 小组结对编程的照片(QQ群截图) 项目中自己负责的部分 代码的综合整理,错误查找,合并以及博客的撰写. 个人贡献度划分 彭霖:胡智韬:陆大岳=3:3:4 相关过程的截图 生成题目类驱动类的

结对编程-四则运算 第一周总结

结对编程-四则运算 第一周总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 需求分析 可以生成不同种类的题目 根据用户的需求来生成不同的题目 计算时生成真分数和整数,且结果为分数形式输出 可以输出括号 可以判断用户的正确 设计思路 第一种 设计一个level1类,只负责加减 设计一个level2类,只负责乘除 设计一个level3类,只负责加减乘除 设计一个转化类,将上述的类生成的表达式转换成计算式 比对结果类 缺点 在将括号进行插入时出现问题,难以将

20172316 结对编程-四则运算 第一周 阶段总结

20172316 结对编程-四则运算 第一周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 = 10 - 5 = 之类的两个数,一个运算符的题目 2.题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 判断用户答题正误,并输出正确结果 3.支持真分数 可独立使用 实现分数算式的计算 4.题目去重(扩展需求,加分项) 可独立使用 实现对自动生成

20175314 结队编程项目——四则运算第二周

20175314 结队编程项目--四则运算第二周 一.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 能生成随机数 产生的算式要有括号 要建立堆栈,进行中缀转后缀,以及后续后缀的运算 能输入想要产生的题目数 能输入用户计算的答案 能够比较用户输入的答案是否正确 能够统计用户答题的正确率 二.设计思路 生成一个有加减乘除支持括号的算式,以字符串的形式输出,每个操作数或操作符中间都用

20165330 结对编程项目-四则运算 第二周

需求分析 实现一个命令行程序,要求:自动生成小学四则运算题目(加.减.乘.除) 可实现多个运算符一起运算 可以真分数形式输出结果 测试结果的正确性 统计题目完成数并计算正确率 设计思路 实验首先是完成一个计算器的功能,可以实现简单的+.-.*./运算,在这里设计一个主类生成随机数,生成题目,并判断正确率 实现多运算符,编入四个类分别实现整数运算.真分数运算.判断结果正确并计算正确率 利用JUnit检测非法输入 设计测试类,利用JUnit测试整数类与分数类的四则运算 UML类图 功能截图 Juni