Github项目链接:https://github.com/lutys/arithmetic

一、项目简介

项目要求实现一个自动生成小学四则运算题目的命令行程序。

自然数:0, 1, 2, …。

  • 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
  • 运算符:+, −, ×, ÷。
  • 括号:(, )。
  • 等号:=。
  • 分隔符:空格(用于四则运算符和等号前后)。
  • 算术表达式:e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),

其中e, e1和e2为表达式,n为自然数或真分数。

四则运算题目:e = ,其中e为算术表达式。

二、功能需求与实现情况

(完成)1. 使用 -n 参数控制生成题目的个数,例如:Myapp.exe -n 10 ,将生成10个题目。

(完成)2. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如:Myapp.exe -r 10 ,将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

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

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

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

(完成)6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目,生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:

1. 四则运算题目1

2. 四则运算题目2

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

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

1. 答案1

2. 答案2

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

(完成)9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:

Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt

统计结果输出到文件Grade.txt,格式如下:

Correct: 5 (1, 3, 5, 7, 9)

Wrong: 5 (2, 4, 6, 8, 10)

三、PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30  70

· Estimate

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

 30  70

Development

开发

 1590 2997

· Analysis

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

 100 200

· Design Spec

· 生成设计文档

 60  90

· Design Review

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

 30  30

· Coding Standard

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

 30  30

· Design

· 具体设计

 120  150

· Coding

· 具体编码

 1000  2021

· Code Review

· 代码复审

 50  75

· Test

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

 200  401

Reporting

报告

 60 80

· Test Report

· 测试报告

 30  40

· Size Measurement

· 计算工作量

10  10

· Postmortem & Process Improvement Plan

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

 20 30

合计

   1680

3147

四、效能分析

在改进程序性能上,我们并没有做太多的改变,一开始对于过程中不能产生符数这点,我们想在生成表达式的时候每生成一部分就进行判断,但实现过程中发现这样反复的检查不利于运行效率。于是将过程中不能产生负数这一功能放在计算功能中,在每计算两个数之后判断。

五、设计实现过程

(包中各文件如图所示)

大致分工:卢泰佑:计算表达式、文件的存取作答改错、主类编写

李密:生成表达式、查重、主类编写

calculate.java:计算表达式-———传入表达式,将表达式按数字(分数为一整体)与符号拆分放入数组,逐一判断每个元素按条件压入取出栈(数字栈、符号栈)计算出结果

create_only:生成唯一的表达式———如果存表达式的数组中为空,生成的表达式加入数组,否则每生成一个表达式就与之前的判断,如果相同则生成新的表达式

dupilcate_checking.java:查重———中缀表达式变成后缀表达式,构建二叉树,通过比较二叉树的左右孩子即可查重

GeneratingExpression.java:生成表达式———通过操作符的取值,来判定操作数的个数。通过蛮力法对表达式相应位置插入括号,并对表达式的规范进行判定。

readAnswer.java:读取作答文件———实例化FileInputStream,接着使用bufferreader从字符输入流中读取文本,缓冲各个字符,使用readline()方法逐一读取各行存入数组,返回数组类型

readFile.java:读取答案文件———原理同readAnswer.java

saveAnswers.java:写入答案———创建getOutputStream对象调用write()方法写入

saveExercises.java:写入题目———创建getOutputStream对象调用write()方法写入

六、代码说明

calculate.java(计算表达式)

import java.util.ArrayList;
import java.util.Stack;public class calculate {static GeneratingExpression ges = new GeneratingExpression();main m = new main();public String jisuan(String ss) {String st1;int int1=0;ArrayList<String> a1=new ArrayList<String>();ArrayList<String> a2=new ArrayList<String>();String st=ss;String o,oo;String[] a=st.split("\\+|\\-|\\×|\\÷|\\(|\\)");String[] b=st.split("");String[] c;String tt = "";StringBuffer sb = new StringBuffer("");Stack<String> zhan_num = new Stack<String>();Stack<String> zhan_string = new Stack<String>();for(int i=0;i<a.length;i++) {//将所有数化为分数if(a[i].equals("")) {}else if(a[i].contains("/")) {}else {String fz = a[i];a[i]=fz+"/1";}if(!a[i].equals("")) {a1.add(a[i]);    }}for(int i1=0;i1<b.length;i1++) {if(b[i1].equals("+")) {b[i1]="m+m";}else if(b[i1].equals("-")) {b[i1]="m-m";}else if(b[i1].equals("×")) {b[i1]="m×m";}else if(b[i1].equals("÷")) {b[i1]="m÷m";}else if(b[i1].equals("(")) {b[i1]="m(m";}else if(b[i1].equals(")")) {b[i1]="m)m";}}for(int i2=0;i2<b.length;i2++) {sb.append(b[i2]);}String st2 = sb.toString();c = st2.split("m");for(int i3=0;i3<c.length;i3++) {if(!c[i3].equals("")) {a2.add(c[i3]);}}for(int i4=0;i4<a2.size();i4++) {String st3=a2.get(i4);if(st3.substring(0, 1).matches("\\d")) { //contains不能使用正则表达式
            a2.set(i4, a1.get(int1));int1++;}}for(int idai=0;idai<a2.size();idai++) {  //处理带分数if(a2.get(idai).contains("'")) {String dai = a2.get(idai);int aa = Integer.parseInt(dai.substring(0, dai.indexOf("'")));int bb = Integer.parseInt(dai.substring(dai.indexOf("'")+1, dai.indexOf("/")));String cc = dai.substring(dai.indexOf("/")+1, dai.length()); //包含起始字符String dd = String.valueOf(aa*bb);String ee = dd+"/"+cc;a2.set(idai, ee);}}    for(int i4=0;i4<a2.size();i4++) {String st4 = a2.get(i4);if(st4.substring(0, 1).matches("\\d")) {zhan_num.push(st4);}else if(st4.equals("(")) {zhan_string.push(st4);}else if(st4.equals(")")) {String st5 = yunsuan(zhan_num.pop(), zhan_num.pop(), zhan_string.pop());zhan_num.push(st5);zhan_string.pop();}else if(youxianji(st4)>0) {if (zhan_string.isEmpty()) { // 栈为空直接入栈
                    zhan_string.push(st4);}else {// 如果栈顶元素优先级大于或等于要入栈的元素,将栈顶元素弹出并计算,然后入栈if (youxianji(zhan_string.peek())>=youxianji(st4)) {String st5 = yunsuan(zhan_num.pop(), zhan_num.pop(), zhan_string.pop());//
                        String[] pp = st5.split("/");if((Integer.parseInt(pp[0])<0)||(Integer.parseInt(pp[1])<0)){jisuan(ges.GeneratingExpression(Integer.parseInt(m.sz1[2])));}zhan_num.push(st5);}zhan_string.push(st4);}}}while (!zhan_string.isEmpty()) {String st5 = yunsuan(zhan_num.pop(), zhan_num.pop(), zhan_string.pop());String[] pp = st5.split("/");if((Integer.parseInt(pp[0])<0)||(Integer.parseInt(pp[1])<0)){jisuan(ges.GeneratingExpression(Integer.parseInt(m.sz1[2])));}tt = st5;zhan_num.push(st5);}String[] ttt = tt.split("/");  //如为xx/1的形式,输出xxif(ttt[1].equals("1")) {return ttt[0];}else if(Integer.parseInt(ttt[0])==0) {return "0";}else if(Integer.parseInt(ttt[0])>Integer.parseInt(ttt[1])) {  //若分子大于分母,输出带分数String xx = String.valueOf(Integer.parseInt(ttt[0])/Integer.parseInt(ttt[1]));String yy = String.valueOf(Integer.parseInt(ttt[0])%Integer.parseInt(ttt[1]));String zz = xx+"'"+yy+"/"+ttt[1];return zz;}else {return zhan_num.pop();}}public static String yunsuan(String st6,String st7,String st8) { //注意两数顺序String[] fenshu1 = st7.split("/");int fenzi1 = Integer.parseInt(fenshu1[0]);int fenmu1 = Integer.parseInt(fenshu1[1]);String[] fenshu2 = st6.split("/");int fenzi2 = Integer.parseInt(fenshu2[0]);int fenmu2 = Integer.parseInt(fenshu2[1]);if(st8.equals("+")) {int fenmu3 = least_common(fenmu1,fenmu2);int fenzi3 = fenmu3/fenmu1*fenzi1+fenmu3/fenmu2*fenzi2;String s = huajian(fenmu3,fenzi3);return s;}else if(st8.equals("-")) {int fenmu3 = least_common(fenmu1,fenmu2);int fenzi3 = fenmu3/fenmu1*fenzi1-fenmu3/fenmu2*fenzi2;String s = huajian(fenmu3,fenzi3);return s;}else if(st8.equals("×")) {int fenmu3 = fenmu1*fenmu2;int fenzi3 = fenzi1*fenzi2;String s = huajian(fenmu3,fenzi3);return s;}else {  //除法int fenmu3 = fenmu1*fenzi2;int fenzi3 = fenzi1*fenmu2;String s = huajian(fenmu3,fenzi3);return s;}}public static int least_common(int int2,int int3) {  //求最小公倍数int y = 0;if(int2<int3){int t=int2;int2=int3;int3=t;}for(int i=int3;i<=int2*int3;i++){if(i%int2==0 && i%int3==0) y=i;}return y;}public static String huajian(int int5,int int6) {  //化简分数,int5为分母,int6为分子int greatest_common = greatest_common(int5,int6);String st8 = String.valueOf(int6/greatest_common)+"/"+String.valueOf(int5/greatest_common);return st8;}public static int greatest_common(int x, int y){  //辗转相除法求最大公约数if(y == 0)return x;elsereturn greatest_common(y,x%y);}public static int youxianji(String st9) {if(st9.equals("+")) return 1;else if(st9.equals("-")) return 1;else if(st9.equals("×")) return 2;else if(st9.equals("÷")) return 2;else return 0;}
}

GeneratingExpression.java(生成表达式)

import java.util.Random;public class GeneratingExpression {calculate result=new calculate();String operationCharacter[]= {"+","-","×","÷"};int operand[]= {2,3,4};GeneratingExpression(){}public String GeneratingExpression(int k){int i,j,q,w,e,r;j=new Random().nextInt(3)+2;//设定操作数个数q=new Random().nextInt(k);w=new Random().nextInt(k-1)+1;e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;while(q/w>=k) {q=new Random().nextInt(k);}String a,b;String s1=huajian(w,q);String s2=huajian(r,e);String []s11=s1.split("\\/");String []s22=s2.split("\\/");q=Integer.valueOf(s11[0]);w=Integer.valueOf(s11[1]);e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(q==0)a=String.valueOf(q);else if(q/w==0)a=q+"/"+w;else if(q/w<(float)q/w)a=q/w+"'"+(q-q/w*w)+"/"+w;else a=String.valueOf(q/w);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);if(j==2) {//两个操作数String op1=operationCharacter[new Random().nextInt(4)];String s;while(b.equals("0")&&op1.equals("÷")||e/r>=k) {//判0操作e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}s=a+op1+b;return s;}if(j==3) {//三个操作数int t,y;String c;String op1=operationCharacter[new Random().nextInt(4)];String op2=operationCharacter[new Random().nextInt(4)];t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;String s3=huajian(y,t);String []s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);String s=null;i=new Random().nextInt(3);switch(i) {判0操作case 0:{while(b.equals("0")&&op1.equals("÷")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}while(c.equals("0")&&op2.equals("÷")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}s=a+op1+b+op2+c;break;}case 1:{while(op2.equals("÷")&&c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}while(op1.equals("÷")&&result.jisuan(b+op2+c).equals("0")||e/r>=k||t/y>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);while(op2.equals("÷")&&c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}s=a+op1+"("+b+op2+c+")";break;}}case 2:{op1=operationCharacter[new Random().nextInt(4)];op2=operationCharacter[new Random().nextInt(4)];while(op1.equals("÷")&&b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}while(op2.equals("÷")&&c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(op1.equals("×")||op1.equals("÷")||op2.equals("-")||op2.equals("+"))s=a+op1+b+op2+c;else s="("+a+op1+b+")"+op2+c;break;}}return s;}if(j==4) {//四个操作数int t,y,m,n;String c,d;String op1=operationCharacter[new Random().nextInt(4)];String op2=operationCharacter[new Random().nextInt(4)];String op3=operationCharacter[new Random().nextInt(4)];t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;String s3=huajian(y,t);String s4=huajian(n,m);String []s33=s3.split("\\/");String []s44=s4.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);m=Integer.valueOf(s44[0]);n=Integer.valueOf(s44[1]);if(t==0)c="0";else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);if(m==0)d="0";else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else d=String.valueOf(m/n);String s=null;i=new Random().nextInt(6);switch(i) {//判0操作case 0:{while(op1.equals("÷")&&op3.equals("÷")&&op3.equals("÷")&&b.equals("0")||c.equals("0")||d.equals("0")||e/r>=k||t/y>=k||m/n>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&b.equals("0")||d.equals("0")||e/r>=k||m/n>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}}while(!op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&c.equals("0")||t/y>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&c.equals("0")||d.equals("0")||t/y>=k||m/n>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&d.equals("0")||m/n>=k) {if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||c.equals("0")||e/r>=k||t/y>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}s=a+op1+b+op2+c+op3+d;break;}case 1:{while(op1.equals("÷")&&op3.equals("÷")&&op3.equals("÷")&&b.equals("0")||c.equals("0")||d.equals("0")||e/r>=k||t/y>=k||m/n>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&b.equals("0")||d.equals("0")||e/r>=k||m/n>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}}while(!op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&c.equals("0")||t/y>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&c.equals("0")||d.equals("0")||t/y>=k||m/n>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&d.equals("0")||m/n>=k) {if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||c.equals("0")||e/r>=k||t/y>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}if(op1.equals("×")||op1.equals("÷")&&op2.equals("×")||op2.equals("÷"))s=a+op1+b+op2+c+op3+d;else if(op3.equals("÷")||op3.equals("×"))s="("+a+op1+b+op2+c+")"+op3+d;else s=a+op1+b+op2+c+op3+d;break;}case 2:{while(op1.equals("÷")&&op3.equals("÷")&&op3.equals("÷")&&b.equals("0")||c.equals("0")||d.equals("0")||e/r>=k||m/n>=k||t/y>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&b.equals("0")||d.equals("0")||e/r>=k||m/n>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}}while(!op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&c.equals("0")||t/y>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&c.equals("0")||d.equals("0")||t/y>=k||m/n>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&d.equals("0")||m/n>=k) {if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||c.equals("0")||e/r>=k||t/y>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}if(op1.equals("×")||op1.equals("÷"))s=a+op1+b+op2+c+op3+d;else if(op2.equals("+")||op2.equals("-"))s=a+op1+b+op2+c+op3+d;else s="("+a+op1+b+")"+op2+c+op3+d;break;}case 3:{while(op1.equals("÷")&&d.equals("0")||b.equals("0")||c.equals("0")||m/n>=k||t/y>=k||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&c.equals("0")||t/y>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&c.equals("0")||d.equals("0")||t/y>=k||m/n>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&d.equals("0")||m/n>=k) {if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}s=a+op1+"("+b+op2+c+op3+d+")";break;}case 4:{while(op1.equals("÷")&&!(!op2.equals("÷")&&!op3.equals("÷"))&&b.equals("0")||c.equals("0")||d.equals("0")||e/r>=k||t/y>=k||m/n>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op3.equals("÷")&&b.equals("0")||c.equals("0")||e/r>=k||t/y>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}while(!op1.equals("÷")&&op2.equals("÷")&&op3.equals("÷")&&c.equals("0")||d.equals("0")||t/y>=k||m/n>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&op2.equals("÷")&&!op3.equals("÷")&&c.equals("0")||t/y>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}}while(!op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&d.equals("0")||m/n>=k) {if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}if(op2.equals("+")||op2.equals("-"))s=a+op1+"("+b+op2+c+")"+op3+d;else if(op1.equals("×")||op1.equals("÷"))s=a+op1+"("+b+op2+c+")"+op3+d;else s=a+op1+b+op2+c+op3+d;break;}case 5:{while(op1.equals("÷")&&op2.equals("÷")&&b.equals("0")||c.equals("0")||d.equals("0")||m/n>=k||t/y>=k||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&b.equals("0")||d.equals("0")||m/n>=k||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(!op1.equals("÷")&&op2.equals("÷")&&c.equals("0")||d.equals("0")||t/y>=k||m/n>=k) {if(c.equals("0")||t/y>=k) {t=new Random().nextInt(k);y=new Random().nextInt(k-1)+1;s3=huajian(y,t);s33=s3.split("\\/");t=Integer.valueOf(s33[0]);y=Integer.valueOf(s33[1]);if(t==0)c=String.valueOf(t);else if(t/y==0)c=t+"/"+y;else if(t/y<(float)t/y)c=t/y+"'"+(t-t/y*y)+"/"+y;else c=String.valueOf(t/y);}if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}while(op1.equals("÷")&&!op2.equals("÷")&&!op3.equals("÷")&&b.equals("0")||e/r>=k) {if(b.equals("0")||e/r>=k) {e=new Random().nextInt(k);r=new Random().nextInt(k-1)+1;s2=huajian(r,e);s22=s2.split("\\/");e=Integer.valueOf(s22[0]);r=Integer.valueOf(s22[1]);if(e==0)b=String.valueOf(e);else if(e/r==0)b=e+"/"+r;else if(e/r<(float)e/r)b=e/r+"'"+(e-e/r*r)+"/"+r;else b=String.valueOf(e/r);}}while(!op1.equals("÷")&&!op2.equals("÷")&&op3.equals("÷")&&d.equals("0")||m/n>=k) {if(d.equals("0")||m/n>=k) {m=new Random().nextInt(k);n=new Random().nextInt(k-1)+1;s3=huajian(n,m);s33=s3.split("\\/");m=Integer.valueOf(s33[0]);n=Integer.valueOf(s33[1]);if(m==0)d=String.valueOf(m);else if(m/n==0)d=m+"/"+n;else if(m/n<(float)m/n)d=m/n+"'"+(m-m/n*n)+"/"+n;else c=String.valueOf(m/n);}}if(op2.equals("÷")||op2.equals("×"))s=a+op1+b+op2+"("+c+op3+d+")";else if(op3.equals("÷")||op3.equals("×"))s=a+op1+b+op2+c+op3+d;else s=a+op1+b+op2+"("+c+op3+d+")";break;}}return s;}return null;}public static String huajian(int int5,int int6) {  //化简分数,int5为分母,int6为分子int greatest_common = greatest_common(int5,int6);String st8 = String.valueOf(int6/greatest_common)+"/"+String.valueOf(int5/greatest_common);return st8;}public static int greatest_common(int x, int y){  //辗转相除法求最大公约数if(y == 0)return x;elsereturn greatest_common(y,x%y);}
}

duplicate_checking.java(查重)

import java.util.Stack;public class duplicate_checking {Stack<String> stack=new Stack<>();//存放除运算数的字符串int i,j,k;String a[]=new String[100];//存放数字String b[]=new String[100];String temp;Nope cnki(String s){i=0;j=0;k=0;while(j<s.length()) {//中缀表达式转化为后缀表达式temp=s.substring(j,j+1);if(temp.matches("\\d+")||temp.equals("'")||temp.equals("/")) {//对操作数存储,用数组实现a[i++]=temp;while(temp.matches("\\d+")||temp.equals("'")||temp.equals("/")) {if(j+1==s.length())break;temp=s.substring(j+1,j+2);if(temp.matches("\\d+")||temp.equals("'")||temp.equals("/")) {a[i-1]+=temp;j++;}    }b[k++]=a[i-1];}else {if(stack.empty())stack.push(temp);else if(temp.equals("("))stack.push(temp);else if(stack.peek().equals("("))stack.push(temp);else if(temp.equals(")")) {while(!stack.peek().equals("("))b[k++]=stack.pop();stack.pop();}else {if(prior(temp)>prior(stack.peek()))stack.push(temp);else {do {b[k++]=stack.pop();if(stack.empty()||stack.peek().equals("("))break;}while(prior(temp)<=prior(stack.peek()));stack.push(temp);}}}j++;}while(!stack.empty())b[k++]=stack.pop();b[k]=null;int m=0;while(b[m]!=null) m++;return new Nope().BiTree(b,m-1);}int prior(String s) {//运算优先级的判断if(s.equals("+")||s.equals("-"))return 0;else return 1;}}
class Nope{String value;//结点的值Nope lc,rc;//左右孩子
Nope BiTree(String s[],int i){//构建二叉树Nope p=new Nope();Nope temp=new Nope();p.value=s[i];    if(p.value.matches("\\+|\\-|\\×|\\÷"))p.rc=BiTree(s,i-1);temp=p;int count=0;if(p.value.matches("\\+|\\-|\\×|\\÷")) {while(temp.rc.value.matches("\\+|\\-|\\×|\\÷")) {temp=temp.rc;count++;}count=count+1;}if(p.value.matches("\\+|\\-|\\×|\\÷"))p.lc=BiTree(s,i-2*count);return p;}public boolean compare(Nope p,Nope q) {if(p.value.equals(q.value)) {if(!p.value.matches("\\+|\\-|\\×|\\÷"))return true;return compare(p.lc,q.lc)&&compare(p.rc,q.rc)||compare(p.lc,q.rc)&&compare(p.rc,q.lc);}else return false;}
}

create_only.java(生成唯一表达式)

import java.util.ArrayList;public class create_only {static GeneratingExpression ge = new GeneratingExpression();main m = new main();static duplicate_checking dc = new duplicate_checking();static Nope nope = new Nope();public String cha() {String s2 = ge.GeneratingExpression(Integer.parseInt(m.sz1[2]));if(m.chachong.size()==0) {m.chachong.add(s2);}else {for(int p=0;p<m.chachong.size();p++) {if(!nope.compare(dc.cnki(s2),dc.cnki(m.chachong.get(p)))) {}else {return cha();}}}m.chachong.add(s2);return s2;
}
}

readAnswer.java(读标准答案文件)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;public class readAnswer {
List<String> list1 = new ArrayList<String>();public List<String> read (String s) {try {File file = new File(s);if(file.isFile() && file.exists()) { //当文件正常且存在InputStreamReader in = new InputStreamReader(new FileInputStream(file), "utf-8");BufferedReader br = new BufferedReader(in); //从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取String aa = null;while ((aa = br.readLine()) != null) {list1.add(aa);}br.close();} else {System.out.println("文件不存在!");}} catch (UnsupportedEncodingException e) {System.out.println("字符编码不支持");} catch (FileNotFoundException e) {System.out.println("找不到指定文件");} catch (IOException e) {System.out.println("I/O错误");}return list1;}
}

readFile.java(读取作答文件)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;public class readFile {
List<String> list1 = new ArrayList<String>();public List<String> read(String s) {try {File file = new File(s);if(file.isFile() && file.exists()) { //当文件正常且存在InputStreamReader in = new InputStreamReader(new FileInputStream(file), "utf-8");BufferedReader br = new BufferedReader(in); //从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取String aa = null;while ((aa = br.readLine()) != null) {list1.add(aa);}br.close();} else {System.out.println("文件不存在!");}} catch (UnsupportedEncodingException e) {System.out.println("字符编码不支持");} catch (FileNotFoundException e) {System.out.println("找不到指定文件");} catch (IOException e) {System.out.println("I/O错误");}return list1;}
}

saveAnswers.java(存入答案)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class saveAnswers {private static String path = "F:\\Answers.txt";int i = 1;public void xieru(String s){OutputStream out;try {out = getOutputStream();String ss = String.valueOf(i)+".";out.write(ss.getBytes()); //写入题的序号out.write("  ".getBytes()); //序号后写入空格于题目分隔开out.write(s.getBytes("utf-8"));//写入题目out.write("\r\n".getBytes());//写入换行i++;} catch (IOException e) {System.out.println("xieru方法I/O错误");}         }public static OutputStream getOutputStream(){try {File file = new File(path); //先创建File类对象,存入文件路径if (!file.exists()) {file.createNewFile(); //如文件不存在则创建文件
               }return new FileOutputStream(file,true);//再实例化FileOutputStream,参数设置为true才不会覆盖之前写入的东西} catch (FileNotFoundException e) {System.out.println("找不到指定文件");} catch (IOException e) {System.out.println("getOutputStream方法I/O错误");}return null;}
}

saveExercises.java(存入题目)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class saveExercises {private static String path = "F:\\Exercises.txt";main ma = new main();int i = 1;public void xieru(String s){OutputStream out;try {out = getOutputStream();String ss = String.valueOf(i)+".";out.write(ss.getBytes()); //写入题的序号out.write("  ".getBytes()); //序号后写入空格于题目分隔开out.write(s.getBytes("utf-8"));//写入题目out.write("\r\n".getBytes());//写入换行i++;} catch (IOException e) {System.out.println("xieru方法I/O错误");}
}public static OutputStream getOutputStream(){try {File file = new File(path); //先创建File类对象,存入文件路径if (!file.exists()) {file.createNewFile(); //如文件不存在则创建文件
           }return new FileOutputStream(file,true);//再实例化FileOutputStream,参数设置为true才不会覆盖之前写入的东西} catch (FileNotFoundException e) {System.out.println("找不到指定文件");} catch (IOException e) {System.out.println("getOutputStream方法I/O错误");}return null;}
}

main.java

import java.util.ArrayList;
import java.util.Scanner;public class main {static int exerciseNum;static String[] sz1;static String s1;static calculate cc= new calculate();static create_only aa1 = new create_only();static GeneratingExpression ge = new GeneratingExpression();static saveExercises sa = new saveExercises();static saveAnswers sa1 = new saveAnswers();static readFile rf = new readFile();static readAnswer ra = new readAnswer();static ArrayList<Integer> T=new ArrayList<Integer>();static ArrayList<Integer> F=new ArrayList<Integer>();static ArrayList<String> chachong=new ArrayList<String>();private static Scanner sn1;static duplicate_checking dc = new duplicate_checking();static Nope nope = new Nope();public static void main(String[] args) {sn1 = new Scanner(System.in);if(sn1.hasNext()) { //如果有输入s1 = sn1.nextLine();if(s1.contains("-n")&&(s1.substring(s1.indexOf("r")+2, s1.length())).matches("\\d+")) { //生成题目与答案sz1 = s1.split("\\D+");//sz1[1]存题数,sz1[2]存数范围exerciseNum= Integer.parseInt(sz1[1]);for(int i=0;i<Integer.parseInt(sz1[1]);i++) {String s2 = aa1.cha();sa.xieru(s2+"=");String s3 = cc.jisuan(s2);sa1.xieru(s3);}        System.out.println("成功生成题目与答案!");}else if(s1.contains("-e")) { //改错功能String t = s1.substring(s1.indexOf("e")+2,s1.indexOf("a")-2);//存题目地址String d = s1.substring(s1.indexOf("a")+2,s1.length());//存作答地址int u=rf.read(t).size();for(int ii=0;ii<u;ii++){if((rf.read(t).get(ii)).equals(ra.read(d).get(ii))) {T.add(ii+1);}else {F.add(ii+1);}}System.out.print("Correct: "+T.size()+"("); //打印正确的题数与题目号for(int i=0;i<T.size();i++) {if(!(i==T.size()-1)) {System.out.print(T.get(i)+",");}else {System.out.print(T.get(i));}}System.out.println(")");System.out.print("Wrong: "+F.size()+"("); //打印错误的题数与题目号for(int i=0;i<F.size();i++) {if(!(i==F.size()-1)) {System.out.print(F.get(i)+",");}else {System.out.print(F.get(i));}}System.out.print(")");}else System.out.println("请输入有效命令");}else System.out.println("请输入命令");}
}

七、运行结果

同理,生成10000道:

八、实际花费时间

如第三点psp表所示。

九、项目小结

本次项目为结对项目,在刚开始做项目的时候,我们两个人对这个项目的具体框架内容并不是特别清晰。导致一开始的分工并不是特别清楚,只进行了大概的分工。在做项目的过程中,由于很多东西没有事先想清楚,导致等到写到一些部分的时候与别的部分有所冲突。在项目进行到一半的时候,很多具体的分工、写法才确定下来,虽然因此拖慢了进度,但是在不断的交流中还是修正完善了许多功能,到最后项目的完成。因此在以后的结对项目中,具体各个部分的功能内容最好要先思考清楚,分工明确之后编写项目的效率会更高。在做结对项目的过程中,我们也提高了编码的熟练度,对代码编写的许多知识也有所学习。

评价:

卢泰佑:在和队友李密讨论的过程中,我发现了一些在编写代码过程中的一些不足与错误,同时他也根据我们的计划去认真实现,由此使结对项目完成得更好。

李密:在和队友得讨论中改善了许多功能,他也提出了一些更好的建议,使我们在交流中完善了许多功能。

转载于:https://www.cnblogs.com/luty/p/9729617.html

结对编程—四则运算(JAVA)(卢泰佑、李密)相关推荐

  1. postfixcalc函数 java_结对编程--四则运算(Java)萧英杰 夏浚杰

    结对编程--四则运算(Java)萧英杰 夏浚杰 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目中数值(自然数.真分数 ...

  2. java 四则运算gui_结对编程-四则运算GUI的实现

    一.项目成员以及coding地址: 二.结对编程题目描述 在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI,成为一个有基本功能.一定价值的程序.在下面的 ...

  3. 张天钰 内大计算机学院,20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  4. 结对编程--------四则运算 实验总结2

    结对编程----------四则运算 实验总结2 结对对象 20172301 郭恺 20172328 李馨雨 过程截图 这个是我们编写的main,叫ArithmeticTest1主要用于生成随机等级的 ...

  5. 结对编程-四则运算生成

    结对编程-四则运算生成 java实现四则运算程序 github传送门:https://github.com/JJYdesu/operation 成员:赖展飞 江家懿 一.项目要求 实现一个自动生成小学 ...

  6. 20162303 结对编程-四则运算(挑战出题)

    结对编程-四则运算(挑战出题) 结对伙伴:20162307 张韵琪 需求分析 1.建立一个新的代码仓库用于储存代码 2.随机生成指定运算符个数.指定个数和指定存储路径的表达式,包括括号 3.根据要求进 ...

  7. 20172304 结对编程--四则运算实验总结

    20172304 结对编程--四则运算 结对对象 20172301 郭恺 20172328 李馨雨 需求分析 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类 ...

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

    20172316 结对编程-四则运算 第一周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目 ...

  9. 结对编程——四则运算过程

    一.问题描述: 某公司程序员二柱的小孩上了小学二年级,老师让家长每天出100道(100以内)四则运算题目给小学生做. 二.结对对象:杨思思 博客地址:http://www.cnblogs.com/ci ...

最新文章

  1. 图像相似度计算之直方图方法OpenCV实现
  2. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7.5 使用StAX写出XML文档
  3. 学习Oracle 最好的5本书,最畅销的Oracle 5本书
  4. 《Unity着色器和屏幕特效开发秘笈》—— 3.4 创建BlinnPhong高光类型
  5. 如何配置Keil 外部编辑器?
  6. blocked java线程_Java线程状态:BLOCKED与WAITING的区别
  7. 网络流之 最短增广路算法模板(SAP)
  8. HDU4007 Dave [杂题]
  9. response.setHeader()的用法
  10. 创新设计模式:抽象工厂模式
  11. 96 年美女胜出!那个有关“猪脸识别”的比赛决出冠军啦
  12. 超级易使用的jquery视频背景插件Vide
  13. 单片机炫彩灯实训报告_单片机实验报告一-流水灯实验
  14. 双十一数码产品选什么好?双十一数码好物推荐
  15. 【黑苹果镜像】macOS Monterey 12.3正式版 (21E230) With OpenCore 0.7.9 and Clover 5144 and winPE原版镜像
  16. HTTP Basic 认证
  17. Cocos--开启物理
  18. Java大作业——购物车
  19. java的h2是什么_什么是H2数据库
  20. 吃货联盟订餐系统项目

热门文章

  1. nand读寿命_Nand Flash的擦写次数与使用寿命
  2. 日期格式不一致问题处理
  3. J-LINK 烧录程序
  4. 计算机睡眠无法锁屏是怎么设置密码,教你电脑待机锁屏怎么设置
  5. 数值计算之 插值法(5)分段插值,埃尔米特插值
  6. 自动(智能)驾驶系列| 插播 深挖自动驾驶数据集
  7. kuangbin 数学训练一 Billiard Balls
  8. 带计时器和读存档的打字游戏
  9. nvidia Quadro P620在linux下安装驱动
  10. 云效告诉你如何进行研发排期,高效达成目标