1.题目要求

  1. 1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
  2. 2.运算符为 +, −, ×, ÷。
  3. 3.并且要求能处理用户的输入,并判断对错,打分统计正确率。
  4. 4.要求能处理用户输入的真分数, 1/2, 5/12 等。
  5. 5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目Myapp.exe -n 10

2.功能分析

  • 能随机生成包括+, −, ×, ÷的两个数直接的运算。
  • 能够从命令行读取输入的答案进行匹配,并判断对错。
  • 能够统计答题数量与正确率。
  • 能够自己根据需求生成题目个数与数值范围。

3.程序设计

  • 首先要有一个分子类 Fraction,类中包含分子 Numerator,分母 Denominator,与一个用来表示分数形式的字符串 fraction。
  1. public class Fraction {
  2. private int Numerator;
  3. private int Denominator;
  4. private String fraction;
  5. }
  • 同时在分子类中还有一个生成随机分数的方法,m表示数值的范围。
  1. public String creatfraction(int m) //创建分数并且化为最简
  2. {
  3. int i, j;
  4. Numerator = (int) (Math.random() * m + 1);
  5. Denominator = (int) (Math.random() * m + 1);
  6. i = Numerator;
  7. j = Denominator;
  8. j = Mathod.getGCD(i, j);
  9. Numerator = Numerator / j;
  10. Denominator = Denominator / j;
  11. fraction = Mathod.Reduction(Numerator, Denominator);
  12. return fraction;
  13. }
  • 对于加、减、乘、除计算在一个计算类 Calculate 中写四个对应的函数,在每个方法中传入两个分子类对象。
  1. public class Calculate {
  2. public String add(Fraction a, Fraction b) //加法 参考分数间加减乘除 用四个变量表示两个分数的分子分母
  3. {
  4. int i, j, k, s, m, n, p;
  5. i = a.getNumerator();// 分子
  6. j = a.getDenominator();// 分母
  7. k = b.getNumerator();
  8. s = b.getDenominator();
  9. m = i * s + j * k;
  10. n = s * j;
  11. p = Mathod.getGCD(m, n);
  12. return Mathod.Reduction(m / p, n / p);
  13. }
  14. public String div(Fraction a, Fraction b)//除法 设置生成的随机数不为0,则不存在除数为0的情况
  15. {
  16. int i, j, k, s, m, n, p;
  17. i = a.getNumerator();// 分子
  18. j = a.getDenominator();// 分母
  19. k = b.getNumerator();
  20. s = b.getDenominator();
  21. m = s * i;
  22. n = j * k;
  23. p = Mathod.getGCD(m, n);
  24. return Mathod.Reduction(m / p, n / p);
  25. }
  26. public String sub(Fraction a, Fraction b)//减法
  27. {
  28. int i, j, k, s, m, n, p;
  29. i = a.getNumerator();// 分子
  30. j = a.getDenominator();// 分母
  31. k = b.getNumerator();
  32. s = b.getDenominator();
  33. m = i * s - j * k; //会产生负数,当当负号表示时可能出现不规范例如9/-8,负号在后。
  34. n = j * s;
  35. p = Mathod.getGCD(m, n);
  36. return Mathod.Reduction(m / p, n / p);
  37. }
  38. public String mul(Fraction a, Fraction b)//乘法
  39. {
  40. int i, j, k, s, m, n, p;
  41. i = a.getNumerator();// 分子
  42. j = a.getDenominator();// 分母
  43. k = b.getNumerator();
  44. s = b.getDenominator();
  45. m = i * k;
  46. n = j * s;
  47. p = Mathod.getGCD(m, n);
  48. return Mathod.Reduction(m / p, n / p);
  49. }
  50. }
  • 在构造分数和最后统计对错时会使用到一些方法所以有一个方法类,例如求最大公约数 getGCD 、约分 Reduction、比较答案等 compare。
  1. static int getGCD(int i, int j) //求最大公约数 辗转相除法。
  2. {
  3. int temp;
  4. while (i % j != 0) {
  5. temp = i % j;
  6. i = j;
  7. j = temp;
  8. }
  9. return j;
  10. }
  1. static String Reduction(int i, int j) //约分,化为最简。
  2. {
  3. String k;
  4. if (j == 1) {
  5. k = i + "";
  6. } else {
  7. k = (i) + "" + "/" + (j) + "";
  8. }
  9. return k;
  10. }
  1. static boolean compare(String a, String b) //比较输入值与答案,返回值为boolean类型。
  2. {
  3. if (a.equals(b))
  4. {System.out.println("回答正确");
  5. return true;}
  6. else
  7. {
  8. System.out.println("回答错误,正确答案是" + b);
  9. return false;
  10. }
  11. }
  • 在Test类中写main函数执行。
  1. import java.util.Scanner;
  2. public class Test {
  3. @SuppressWarnings("resource")
  4. public static void main(String[] args) {
  5. Fraction f1 = new Fraction();
  6. Fraction f2 = new Fraction();
  7. int m;
  8. int op;
  9. int right=0,wrong=0;
  10. Scanner s1 = new Scanner(System.in);
  11. Calculate c = new Calculate();
  12. System.out.println("输入题目数");
  13. int i = s1.nextInt();
  14. Scanner scanneer = new Scanner(System.in);
  15. String s2;
  16. Scanner s3 = new Scanner(System.in);
  17. System.out.println("输入范围");
  18. m = s3.nextInt();
  19. for (int j = 0; j < i; j++) {
  20. f1.creatfraction(m);
  21. f2.creatfraction(m);
  22. op = (int) (Math.random() * 4 + 1);
  23. switch (op) {
  24. case 1: {
  25. System.out.println(f1.getFraction() + " " + "+" + " " + f2.getFraction() + " =");
  26. s2 = c.add(f1, f2);
  27. String intput = scanneer.nextLine();
  28. if(Mathod.compare(intput, s2))
  29. right++;
  30. else
  31. wrong++;
  32. break;
  33. }
  34. case 2: {
  35. System.out.println(f1.getFraction() + " " + "-" + " " + f2.getFraction() + " =");
  36. s2 = c.sub(f1, f2);
  37. String intput = scanneer.nextLine();
  38. if(Mathod.compare(intput, s2))
  39. right++;
  40. else
  41. wrong++;
  42. break;
  43. }
  44. case 3: {
  45. System.out.println(f1.getFraction() + " " + "×" + " " + f2.getFraction() + " =");
  46. s2 = c.mul(f1, f2);
  47. String intput = scanneer.nextLine();
  48. if(Mathod.compare(intput, s2))
  49. right++;
  50. else
  51. wrong++;
  52. break;
  53. }
  54. case 4: {
  55. System.out.println(f1.getFraction() + " " + "÷" + " " + f2.getFraction() + " =");
  56. s2 = c.div(f1, f2);
  57. String intput = scanneer.nextLine();
  58. if(Mathod.compare(intput, s2))
  59. right++;
  60. else
  61. wrong++;
  62. break;
  63. }
  64. }
  65. }System.out.println("一共"+i+"题"+" "+"做对"+right+"题"+" "+"做错"+wrong+"题");
  66. }
  67. }

4.程序测试

自我评价

总体而言程序有点冗余,其实应该有许多地方都可改变方法达到简化代码,没有经常的动手编程导致许多基础的输入,输出获取数据等都需要在查找书本或资料才能继续。

在设计除法时因为设定生成的数不会为0,所以跳过了除数不为0的判断。许多方法的调用可能也存在一些隐患。

个人水平不足能力有限还请大家多多指点

psp表格

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

码市地址

coding.net

第一次作业-----四则运算题目生成(基于java)的更多相关文章

  1. 四则运算题目生成(python版)

    四则运算题目生成-基于控制台 项目托管在码云:飞机票 需求分析 根据控制台提示信息,输入题目生成相关配置参数 题目生成数量 数字范围 式子中是否有分数 .... 程序支持 10000 题目生成 题目与 ...

  2. 个人作业1——四则运算题目生成程序(java代码,基于控制台)

    一.题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: ...

  3. 软工作业NO.2小学生线上杨永信——四则运算题目生成

    项目题目:实现一个自动生成小学四则运算题目的命令行程序 github地址:https://github.com/a249970271/Formula 驾驶员:梁沛诗 副驾驶:曾祎祺 项目说明 自然数: ...

  4. 小学生四则运算出题软件-基于java控制台的实现

    .题目描述: 1. 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 -o Exercise.txt 将生成10个题目. 2. 使用 -r 参数控制题目中数值(自然数.真分数和 ...

  5. 第一周作业.四则运算生成器(基于python)

    题目 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数 ...

  6. 结对项目:四则运算题目生成器(Java)

    目录 一.需求分析 二.开发计划 三.实现方案 3.1 项目结构 3.2 代码说明 3.2.1 出题功能代码 3.2.3 批卷功能代码 3.2.3 四则运算功能代码 四.效能分析 4.1 程序效能 4 ...

  7. Web验证码图片的生成-基于Java的实现

    验证码图片是由程序动态产生的,每次访问的内容都是随机的.那么如何采用程序动态产生图片,并能够显示在客户端页面中呢?原理很简单,对于java而言,我们首先开发一个Servlet,这个Servlet的任务 ...

  8. 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序

    1. 编写一个能自动生成小学四则运算题目的程序.(10分)   基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图.   本题发一篇随笔,内容包括: 题 ...

  9. 个人作业1——四则运算题目生成程序(基于C++)

    题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 1 ...

随机推荐

  1. Win7 IIS建站

    1.在控制面板->程序和功能->打开或关闭windows功能->安装IIS服务 2.控制面板->管理工具->IIS管理器 客户端访问Web服务器,服务器端不需关闭防火墙, ...

  2. 关于mysql中的数据查询—嵌套查询

    嵌套查询 一个SELECT  FROM  WHERE语句称为一个查询块. 嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或者HAVING短语的条件中的查询. 注:子查询的SELECT语句中不 ...

  3. js版贪吃蛇

    之前没有写博客的习惯,这是我的第一个博客,有些的不好的地方,希望大家多多提意见 js版的贪吃蛇相对比较简单,废话不多说直接上代码,有需要注意的地方我会标红,github源码地址https://gith ...

  4. 神器Vim之命令介绍

    前天晚上看casa直播项目的组件化,不仅了解了如何快速对现有项目进行组件化,以及进一步不断迭代,实现完全组件化的过程:同时,也被casa的vim技能的熟练程度所震撼.早就听说,vim是unix系统上文 ...

  5. iOS 10 UserNotification框架解析 – 本地通知

    iOS 10以前的通知比较杂乱,把本地通知和远程通知分开了,诞生了许多功能类似的API,很容易让初学者犯迷糊.而iOS 10的通知把API做了统一,利用独立的UserNotifications.fra ...

  6. SVProgressHUD源码解读(2.0.3)

    SVProgressHUD是iOS开发中比较常用的一个三方库,用来在执行耗时操作或者指示用户操作结果的场合,由于使用简单,功能丰富,交互友好,被广泛应用.本文从源码的角度,解读一下实现的过程,希望能起 ...

  7. luogu1001 A+B Problem

    A+B Problem 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|<=10^9). 注意 1.pascal使用integer会爆掉哦! 2.有负数哦! 3.c/c++的main函 ...

  8. 解决mybatis空字段null字段不返回

    Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...

  9. centos下安装jenkins

    To use this repository, run the following command: sudo wget -O /etc/yum.repos.d/jenkins.repo https: ...

  10. JS中的函数、BOM和DOM操作

     一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */   // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...