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

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

  • 需求分析

一、支持四则运算(加减乘除)算式的生成
二、支持对于所生成的题目给与答案解析
三、能够让用户做答而且判断答案是否正确
四、能够统计正确率
五、支持括号
六、支持真分式(本周未实现)java

  • 设计思路

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

    四则运算类:负责数字和符号的生成
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 数字+符号;
    }
}

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

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图dom

  • Junit测试

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

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

  • 运行截图

  • 合做伙伴

  • 姓名:莫礼钟
  • 学号:20162319
  • 博客连接:点击此处→编码

相关文章
相关标签/搜索