• 20162302


    结对编程项目-四则运算(第一周)

    • 需求分析

    1、支持四则运算(加减乘除)算式的生成
    2、支持对于所生成的题目给与答案解析
    3、可以让用户作答并且判断答案是否正确
    4、可以统计正确率
    5、支持括号
    6、支持真分式(本周未实现)

    • 设计思路

    • 首先要有一个部分负责算式的生成(四则运算类和算式生成类)

    四则运算类:负责数字和符号的生成

    import java.util.Random;
    
    public class 四则运算 {
        int 符号编码, 数字;
        String 符号;
        Random 符号随机 = new Random();
        Random 数字随机 = new Random();
        public 四则运算() {
        }
        public String 生成符号(){
            符号编码 = 符号随机.nextInt(4);
            符号解析(符号编码);
            return 符号;
        }
        public int 生成数字(){
            数字 = 数字随机.nextInt(100);
            return 数字;
        }
        public void 符号解析(int a){
            if (a==0)
                符号 = "+";
            else if(a==1)
                符号 = "-";
            else if (a==2)
                符号 = "*";
            else if (a==3)
                符号 = "/";
        }
        public String toString(){
            return 数字+符号;
        }
    }
    

    算式生成器:是四则运算类的子类,负责调用父类的方法根据用户的需求以字符串的形式生成单个算式

    import java.text.DecimalFormat;
    
    public class 生成算式 extends 四则运算 {
        int 阶数, 数字;
        String 算式, 符号;
        DecimalFormat fmt = new DecimalFormat("0");
    
        public 生成算式 (int n){
            阶数 = n;
            生成(阶数);
        }
        public String 生成(int j){
            数字 = 生成数字();
            算式 = fmt.format(数字);
            算式 = 算式.concat(" ");
            for(int i=1; i<j; i++){
                符号 = 生成符号();
                算式 = 算式.concat(符号+" ");
                数字 = 生成数字();
                算式 = 算式.concat(fmt.format(数字)+" ");
            }
            return 算式;
        }
        public String toString(){
            return 算式;
        }
    }
    
    • 然后是运算式子的类,使其可以生成以便于判断答案(算式运算器类和格式转换器类)

    算式运算器:使用到了栈的方法可以运算后缀表达式,在更新以后又可以作为格式转换器的子类进行一步转换并运算,使其也可以支持前缀表达式。
    格式转换器:专门用于转换中缀式为后缀式的类。

    代码篇幅过大
    转换和运算都要用到栈
    

    格式转换器

    • 最后要有驱动器

    驱动器:负责调用运算器和生成器达到生成算式和答案的目的。在命令行里面输出算式,然后由用户来作答,系统可以判断答案是否正确并给出正确率。

    import java.util.Scanner;
    import java.text.NumberFormat;
    
    public class 驱动器 {
        public static void main (String[] args){
            int 正确个数=0;
            Scanner scan = new Scanner(System.in);
            NumberFormat 百分比形式 = NumberFormat.getPercentInstance();
            生成算式 a = new 生成算式(2);
            算式运算器 s = new 算式运算器();
            格式转换器 g = new 格式转换器();
    
            String b = a.生成(2);
            String b1 = g.stringToArithmetic(b);
            int answer1 = s.运算(b1);
            System.out.print(b+"= ");
            int Answer1 = scan.nextInt();
            if (answer1 == Answer1) {
                System.out.println("√");
                正确个数 ++;
            }
            else
                System.out.println("×");
    


    UML图

    • Junit测试

    JUnit测试中缀表达式转化为后缀表达式的转换器

    JUnit测试两种引用(直接引用转换并计算和分步骤转换和计算)方式答案是否一样

    • 运行截图

    • 合作伙伴

    • 姓名:莫礼钟

    • 学号:20162319

    • 博客链接:点击此处→

  • 相关阅读:
    C++ string用法
    C++ 静态变量及函数的生命周期
    C++ const的用法和作用
    C++ 指针和引用的区别
    C++ struct 和 Class的区别
    C++对象模型-构造函数语意学
    大端模式与小端模式、网络字节顺序与主机字节顺序
    Spring Boot系列——Spring Boot如何启动
    分库分表利器——sharding-sphere
    并发和多线程-八面玲珑的synchronized
  • 原文地址:https://www.cnblogs.com/yangjingdian/p/6852380.html
Copyright © 2020-2023  润新知