Github项目链接:https://github.com/shoulder01/Fouroperation.git

一、项目相关要求

1. 使用 -n 参数控制生成题目的个数(实现)

2.使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围(实现)

3.生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2(实现)

4.生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数(未实现)

5.每道题目中出现的运算符个数不超过3个。(实现)

6. 程序一次运行生成的题目不能重复(未实现)

7.在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件(未实现)

8. 程序应能支持一万道题目的生成。(实现)

9. 程序支持对给定的题目文件和答案文件(未实现),判定答案中的对错并进行数量统计(实现)

二、PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

40

· Estimate

· 估计这个任务需要多少时间

1440

1520

Development

开发

1250

1330

· Analysis

· 需求分析 (包括学习新技术)

90

60

· Design Spec

· 生成设计文档

100

· Design Review

· 设计复审 (和同事审核设计文档)

60

40

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

20

· Design

· 具体设计

60

60

· Coding

· 具体编码

500

500

· Code Review

· 代码复审

30

30

· Test

· 测试(自我测试,修改代码,提交修改)

250

300

Reporting

报告

90

90

· Test Report

· 测试报告

50

50

· Size Measurement

· 计算工作量

30

20

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

90

90

合计

1400

1460

三、代码

  1. import java.util.Scanner;
  2. public class Fouroperation{
  3. private static Scanner scanner;
  4. public static void main(String[] args) {
  5. int x,y,i,a1,q,d1=0;
  6. int rigthN=0,wrongN=0;
  7. String g = null;
  8. String d = null;
  9. System.out.println("请选择式子类型:1、整数,2、分数");
  10. scanner=new Scanner(System.in);
  11. a1=scanner.nextInt();
  12. if(a1==1){ //整数运算
  13. System.out.println("请输入题目的数量:");
  14. scanner=new Scanner(System.in);
  15. x=scanner.nextInt();
  16. int rigthanswer[]=new int [x];
  17. int youranswer[]=new int [x];
  18. System.out.println("请输入数值的最大范围:");
  19. y=scanner.nextInt();
  20. for(i=0;i<x;i++){
  21. int a=(int)(Math.random()*y);//随机生成一个整数
  22. int b=(int)(Math.random()*y);//随机生成一个整数
  23. int c=(int)(Math.random()*3);//随机生成一个0-3的整数,生成运算符
  24. if(c==0)
  25. {//加法
  26. d1=a+b;
  27. System.out.print(a+"+"+b+"=");
  28. }
  29. if(c==1)
  30. {//减法
  31. if(a>=b){
  32. d1=a-b;
  33. System.out.print(a+"-"+b+"=");
  34. }else {d1=b-a;
  35. System.out.print(b+"-"+a+"=");
  36. }
  37. }
  38. if(c==2)
  39. {//乘法
  40. d1=a*b;
  41. System.out.print(a+"*"+b+"=");
  42. }
  43. if(c==3)
  44. {//除法
  45. d1=a/b;
  46. System.out.print(a+"/"+b+"=");
  47. }
  48. System.out.println("请输入你的答案:");
  49. q=scanner.nextInt();
  50. youranswer[i]=q;
  51. rigthanswer[i]=d1;
  52. }
  53. System.out.print("\n");
  54. System.out.println("显示答案请输:1");
  55. if(scanner.nextInt()==1){
  56. System.out.println("正确答案:\n");
  57. for(i=0;i<x;i++){
  58. System.out.print(rigthanswer[i]);
  59. System.out.println("\t");
  60. if(youranswer[i]==rigthanswer[i]){
  61. rigthN++;
  62. }else{
  63. wrongN++;
  64. }
  65. }
  66. System.out.print("答对"+rigthN+"题");
  67. System.out.print("答错"+wrongN+"题");
  68. }
  69. }
  70. if(a1==2){ //分数运算
  71. int M,Z;
  72. int x1,x2,B,m1,m2;
  73. System.out.println("请输入题目的数量: ");
  74. scanner=new Scanner(System.in);
  75. x=scanner.nextInt();
  76. String rigthanswer[]=new String [x]; //正确答案数组
  77. String youranswer[]=new String [x]; //做答答案数组
  78. System.out.println("请输入分母数值的最大范围: ");
  79. B=scanner.nextInt();
  80. for(i=0;i<x;i++){
  81. m1=1+(int)(Math.random()*B);//随机生成一个分母
  82. x1=1+(int)(Math.random()*m1);//生成一个比分母小的分子
  83. m2=1+(int)(Math.random()*B);//随机生成一个分母
  84. x2=1+(int)(Math.random()*m2);//生成一个比分母小的分子
  85. int c=(int)(Math.random()*3);//随机生成一个0-3的整数生成运算符
  86. if(c==0){ //加法
  87. Z=x1*m2+x2*m1;
  88. M=m1*m2;
  89. d=simplification(Z,M);
  90. System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"=");
  91. }
  92. if(c==1){ //减法
  93. Z=x1*m2-x2*m1;
  94. M=m1*m2;
  95. d=simplification(Z,M);
  96. System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"=");
  97. }
  98. if(c==2){ //乘法
  99. Z=x1*x2;
  100. M=m1*m2;
  101. d=simplification(Z,M);
  102. System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"=");
  103. }
  104. if(c==3){ //除法
  105. Z=m1*x2;
  106. M=m2*x1;
  107. d=simplification(Z,M);
  108. System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"=");
  109. }
  110. System.out.println("请输入你的答案:");
  111. g=scanner.next();
  112. youranswer[i]=g;//输进自己的答案装到数组中
  113. rigthanswer[i]=d;//将正确答案装到数组中
  114. }
  115. System.out.print("\n");
  116. System.out.println("显示答案请输入:1");
  117. if(scanner.nextInt()==1){
  118. for(i=0;i<x;i++){
  119. System.out.print(rigthanswer[i]);
  120. System.out.println("\t");
  121. if(youranswer[i]==rigthanswer[i]){
  122. rigthN++;//计算做对的题目
  123. }else{
  124. wrongN++;//计算做错的题目
  125. }
  126. }
  127. System.out.print("答对"+rigthN+"题");
  128. System.out.print("答错"+wrongN+"题");
  129. }
  130. }
  131. }
  132. public static String simplification(int a,int b){//把分数结果化简
  133. int y = 1;
  134. for(int i=a;i>=1;i--){
  135. if(a%i==0&&b%i==0){
  136. y = i; //求得最小公约数
  137. break;
  138. }
  139. }
  140. int z = a/y;
  141. int m = b/y;
  142. if(z==0) {
  143. return "0";
  144. }
  145. if(z==m){//分子分母相同情况直接输出整数
  146. return ""+z;
  147. }
  148. return ""+z+"/"+m;//若分子分母不同,则输出分数形式
  149. }
  150. }

四、运行结果

五、总结

这次任务要求是两个人完成,但由于自己基础较差,所以就自己一个人尝试完成。

这次任务有很多功能没有实现,只是实现了一些基本的功能,但这些功能都没有很完善。

在做这个任务的过程中,也是在慢慢捡起学过的java知识,虽然还是没有很大的进步,但还是有一些收获。以后还是会继续努力。

java实现自动生成四则运算的更多相关文章

  1. 根据wsdl文件,Java工程自动生成webservice客户端调用

    根据wsdl文件,Java工程自动生成webservice客户端调用 1,工具:带有webservice插件的myeclips 2,步骤: (1),新建一个Java工程:relationship (2 ...

  2. 20194651—自动生成四则运算题第一版报告chris

    1.需求分析: (1)自动生成四则运算算式(+ - *  /),或两则运算(+  -). (2)剔除重复算式. (3)题目数量可定制. (4)相关参数可控制. (5)生成的运算题存储到外部文件中. 2 ...

  3. java实现自动生成小学四则运算——朱庭震,詹祺豪

    组员:朱庭震,詹祺豪 Github地址:https://github.com/ztz1998/second/tree/master 1题目:实现一个自动生成小学四则运算题目的命令行程序. 2说明: 自 ...

  4. 自动生成四则运算题目(C语言)

    Github项目地址:https://github.com/huihuigo/expgenerator 合作者:马文辉(3118005015).卢力衔(3118005013) 项目简介 1题目:实现一 ...

  5. 结对项目 实现自动生成四则运算题目的程序 (C++)

    本次作业由 陈余 与 郭奕材 结对完成 零.github地址: https://github.com/King-Authur/-Automatically-generate-four-arithmet ...

  6. Java代码自动生成,生成前端vue+后端controller、service、dao代码,根据表名自动生成增删改查功能

    本项目地址:https://github.com/OceanBBBBbb/ocean-code-generator 项目简介 ocean-code-generator采用(适用):     ,并使用m ...

  7. Java实例练习——java实现自动生成长度为10以内的随机字符串(可用于生成随机密码)

    package sorttest; import java.util.ArrayList; import java.util.Collections; import java.util.List; i ...

  8. C语言编程—自动生成四则运算升级版

    #include<stdio.h> #include<time.h> struct fenshu { int fenzi; int fenmu; }Fenshu[]; int ...

  9. C语言#自动生成四则运算的编程

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> ...

随机推荐

  1. Java http请求和调用(二)

    http请求代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader ...

  2. Retrofit2.0+RxJava2.0问题

    问题1:java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path ...

  3. BlockingQueue深入解析-BlockingQueue看这一篇就够了

    本篇将详细介绍BlockingQueue,以下是涉及的主要内容: BlockingQueue的核心方法 阻塞队列的成员的概要介绍 详细介绍DelayQueue.ArrayBlockingQueue.L ...

  4. Excel日期处理

    short format = cell.getCellStyle().getDataFormat(); //其值为22 输入值类型为2018/6/28 17:25:48 if (format!=22) ...

  5. Git操作的一些注意

    这是在在学习Git时遇到的一些需要注意的地方,都是一些小细节的地方,可能会有错误的地方,希望大家可以指出谢谢   1.git使用,安装后,首先要打开git bash   2.必须登录后才可以操作git ...

  6. poj3186(区间DP)

    题目链接:http://poj.org/problem?id=3186 思路: 区间DP,给treat编号为1..n,状态很明显是上界i和下界j,dp[i][j]表示从下标i到下标j之间数据的最大价值 ...

  7. TZOJ 4855 排座椅(贪心)

    描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来后,只有有限的D对同学上课时会交头接耳.同学们在教室 ...

  8. SQL2000清除SQL日志

    1.打开查询分析器,输入命令DUMP TRANSACTION 数据库名 WITH NO_LOG2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收 ...

  9. Laravel图表扩展包推荐:Charts

     2016年11月15日 ·  2283次 ·  4条 ·  laravel,package,charts 介绍 在项目开发中,创建图表通常是一件痛苦的事情.因为你必须将数据转换为图表库支持的格式传输 ...

  10. 【Sikuli】Sikuli 文档

    http://sikulix-2014.readthedocs.io/en/latest/index.html