首先要输入生成题目的数目mhtml
package CaculateSystem; import java.util.Random; public class ProduceProblem { public int ProduceProblem () { String s = ""; Random shu = new Random();//每一个运算式的随机数 int count = 1; //记录符号; char[] operator = new char[]{'+', '-', '*', '/'}; int m = 2 + (int) (Math.random() * 6); //每一个运算式数目的个数 for (int j = 0; j < m; j++) { int num = shu.nextInt(10); s = s +" "+ num; if (count < m) { int c = shu.nextInt(4); s = s +" "+ operator[c]; count++; } } String [] str = s.split(" "); System.out.println(s + "="); Translate t = new Translate(str); return t.flag; } }
package CaculateSystem; import java.util.Stack; public class Translate extends Judge{ int flag; public Translate (String[] args) { Stack<String> z = new Stack<String>(); String jieguo = ""; String t = ""; for (int i = 0; i < args.length; i++) { switch (args[i]) { case "(": z.push(args[i]); break; case "+": case "-": while(z.empty() != true) { t = z.pop(); if (t.equals("(")) { z.push(t); break; } jieguo = jieguo + t + " "; } z.push(args[i]); break; case "*": case "/": while(z.empty() != true) { t = z.pop(); if (t.equals("+") || t.equals("-") || t.equals("(")) { z.push(t); break; } jieguo = jieguo + t + " "; } z.push(args[i]); break; case ")": while (z.empty()== false) { t = z.pop(); if (t.equals("(")) { break; } else { jieguo = jieguo + t + " "; } } break; case" ": break; default: jieguo = jieguo + args[i] + " "; break; } } while (z.empty() == false) { jieguo = jieguo + z.pop() + " "; } String [] str = jieguo.split(" "); Count py = new Count(str); int answer = py.answer; flag = A(answer); } public Translate() { } }
package CaculateSystem; import java.util.Random; public class CreatOpNum { Rational opNum = new Rational(); Random random = new Random(); String opnumFile = ""; String opnumPri = ""; int flag; CreatOpNum(int flag1) { flag = flag1; int a = random.nextInt(9)+1; opNum.setNumerator(a); if (flag1 == 1) {//是分数 int b = random.nextInt(9)+1; while (b == 0) { b = random.nextInt(9)+1; } opNum.setDenominator(b); } else {//不是分数 opNum.setDenominator(1); } } public void getOpNumFile() { opnumFile = opNum.getNumerator() + " / " + opNum.getDenominator(); } public void getOpNumPri() { if (flag == 0) { opnumPri = opNum.getNumerator() + "";//输出整数 } else if (opNum.getNumerator() > opNum.getDenominator()) {//假分数 int n = opNum.getNumerator() / opNum.getDenominator(); int m = opNum.getNumerator() % opNum.getDenominator(); opnumPri = n + " + " + m + " / " + opNum.getDenominator(); } else { opnumPri = opNum.getNumerator() + " / " + opNum.getDenominator(); } } }
package CaculateSystem; public class Rational {//有理数 int numerator = 1;//分子 int denominator = 1;//分母 void setNumerator(int a) {//设置分子 int c = f(Math.abs(a), denominator);//计算最大公约数 numerator = a / c; denominator = denominator / c; if (numerator < 0 && denominator < 0) { numerator = -numerator; denominator = -denominator; } } void setDenominator(int b) {//设置分母 int c = f(numerator, Math.abs(b));//计算最大公约数 numerator = numerator / c; denominator = b / c; if (numerator < 0 && denominator < 0) { numerator = -numerator; denominator = -denominator; } else if (numerator > 0 && denominator < 0) { numerator = -numerator; denominator = -denominator; } } int getNumerator() { return numerator; } int getDenominator() { return denominator; } int f(int a, int b) {//求a,b的最大公约数 if (a == 0) { return 1;//c为分母不能为0 } if (a < b) {//令a>b int c = a; a = b; b = c; } int r = a % b; while (r != 0) { a = b; b = r; r = a % b; } return b; } Rational add(Rational r) {//加法运算 int a = r.getNumerator();//返回有理数r的分子 int b = r.getDenominator();//返回有理数r的分母 int newNumerator = numerator * b + denominator * a;//计算出新分子 int newDenominator = denominator * b;//计算出新分母 Rational result = new Rational(); result.setNumerator(newNumerator); result.setDenominator(newDenominator); return result; } Rational sub(Rational r) {//减法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b - denominator * a; int newDenominator = denominator * b; Rational result = new Rational(); result.setNumerator(newNumerator); result.setDenominator(newDenominator); return result; } Rational muti(Rational r) {//乘法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * a; int newDenominator = denominator * b; Rational result = new Rational(); result.setNumerator(newNumerator); result.setDenominator(newDenominator); return result; } Rational div(Rational r) {//除法运算 int a = r.getNumerator(); int b = r.getDenominator(); Rational result = new Rational(); if (a == 0) { System.out.println("分母/除数不能为0"); result.setNumerator(0); System.exit(0); } else { int newNumerator = numerator * b; int newDenominator = denominator * a; result.setNumerator(newNumerator); result.setDenominator(newDenominator); } return result; } }
代码托管java
挺开心个人同伴能接受与我组队的请求,在这个阶段的研讨中他就像比喻中的副驾驶的位置,为我观察这我发现不了的坑,也在必要的分叉口给了我不少有用的建议,好比在生成随机式子的时候我在弄出简单的随机生成以后,生成较长式子的算法就是由他提醒编写的,固然这样的状况会有不少,我负责大致,而他就负责细节,检查。他很好的在结对下扮演了一个领航员的位置。不过我以为个人伙伴须要提高一下本身的自信,其实好多事情他均可以独立很好的完成的。git
计划 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
估计这个任务须要多少时间 | 200 | 200 |
开发 | ||
需求分析 (包括学习新技术) | 120 | 150 |
生成设计文档 | 30 | 30 |
设计复审 (和同事审核设计文档) | 60 | 75 |
代码规范 (为目前的开发制定合适的规范) | 90 | 105 |
具体设计 | 30 | 60 |
具体编码 | 720 | 810 |
代码复审 | 60 | 60 |
测试(自我测试,修改代码,提交修改) | 90 | 90 |
报告 | ||
测试报告 | 20 | 20 |
计算工做量 | 10 | 10 |
过后总结, 并提出过程改进计划 | 240 | 270 |
合计 | 1500 | 1710 |
http://www.cnblogs.com/math/p/se-tools-001.html
http://www.cnblogs.com/vertextao/p/6593339.html
http://www.cnblogs.com/Vivian517/p/8762830.html
https://blog.csdn.net/newgrammer/article/details/757522
https://en.wikipedia.org/wiki/Polish_notation算法