20162302 - 20162319 结对编程项目-四则运算(第二周)
2017-05-21 23:24
417 查看
结对编程项目-四则运算(第二周)
需求分析
1、实现真分数算式的生成
2、在运算符中增加括号
3、调用相关类进行真分数字符串,转化格式并计算
4、修改之前的代码,增加兼容性,使其支持分数
5、支持括号的运算
6、支持多语言
设计思路
一、分数部分
为了支持分数式的生成,首先要保证分数的生成,所以要修改
NumOpeGenerator类,也就是以前的四则运算类,具体措施就是在里面加上一个生成分数的方法
generateFraction()。
public String generateFraction() { //一个生成分数的方法 int numerator=1 , denominator=0; while (denominator == 0 || numerator >= denominator) { numerator = generateNum(); //生成分子 fraction = fmt.format(numerator); fraction = fraction.concat("/"); denominator = generateNum(); //生成分母 fraction = fraction.concat(fmt.format(denominator) + " "); } return fraction; }
然后需要生成算式,原来的类不能直接用,所以就建立了新的
FormulaGenerator_F类,类似于
FormulaGenerator类。
接下来就是转制和计算部分,转制可以直接调用
InfixToSuffix类,但是在计算的时候就需要专门的计算类了,计算直接引用的书上的
RationalNumber类,但是两个类没有接口,不能直接连接,
FractionCalculator类就起到了连接他们的作用。
通过
evalSingleOp方法实现调用
private String evalSingleOp(char operation, String op1, String op2) { String result = null; String n,d; n = getNumer(op1); d = getDenom(op1); int n1 = Integer.parseInt(n); String d2 = String.valueOf(d); int d1 = Integer.parseInt(d2); RationalNumber op3 = new RationalNumber(n1, d1); n = getNumer(op2); d = getDenom(op2); n1 = Integer.parseInt(n); d2 = String.valueOf(d); d1 = Integer.parseInt(d2); RationalNumber op4 = new RationalNumber(n1, d1); switch (operation) { case ADD: result = (op3.add(op4)).toString(); break; case SUBTRACT: result = (op3.subtract(op4)).toString(); break; case MULTIPLY: result = (op3.multiply(op4)).toString(); break; case DIVIDE: result = (op3.divide(op4)).toString(); }
这样,分数的问题就解决了
二、括号部分
生成括号虽然想起来很容易,但是在实际的操作中就会出现各种各样的问题。比如必须成对出现,左括号前和右括号后必须有运算符等。
首先我将括号作为第五种运算符生成。
public void solveOpe(int a){ //把运算符的代号翻译成运算符并输出 if (a==0) operator = "+"; else if(a==1) operator = "-"; else if (a==2) operator = "*"; else if (a==3) operator = "/"; else if (a==4) operator = bracket(); }
为了达到成对出现的目的,设置一个direction变量,单数左括号,双数右括号,在执行的过程中符号会变化。
public String bracket (){ //成对生成括号 direction ++; if (direction % 2 ==0) { creativeOpe1(); return ") "+operator1; } else { creativeOpe1(); return operator1+" " +"( "; } }
还有一个问题,就是只生成左括号,没有右括号,不能成对出现,所以要对左右括号数量进行统计
public int count (String string, char operate){ //用于统计符号出现次数 int countNumber = 0; for (int i=0; i<string.length(); i++ ){ if (operate == string.charAt(i)) countNumber++; } return countNumber; }
判断并补全不足的括号
public String check(String toCheck){ //检查左右括号数量是否相等 int a = count(toCheck, '('); int b = count(toCheck, ')'); while (a != b){ toCheck = toCheck.concat(" )"); a = count(toCheck, '('); b = count(toCheck, ')'); } return toCheck; }
三、多语言
多语言的问题就相对简单的多,直接把文字设置成变量,再选用不同的语言的时候直接赋不同的值就可以了
System.out.print("请选择语言:简体中文(1)繁體中文(2)English(3):"); int choice = scan2.nextInt(); if (choice == 1) { } else if (choice == 2) { t = "是否使用分式(y/n):"; n = "請輸入算式個數:"; l = "請輸入算式階數:"; an = "答案是:"; rig = "正確率:"; } else if (choice == 3) { t = "Whether the fraction is used(y/n): "; n = "Please enter the number of the expression: "; l = "Please enter the order of the expression: "; an = "The answer is: "; rig = "Correct rate: "; } else if (choice == 4) { t = "小数を使用するかどうか (y/n) : "; n = "数式番号を入力してください: "; l = "計算順序を入力してください: "; an = "答えは:"; rig = "精度: "; } else if (choice == 5) { t = "следует ли использовать дробные (y/n): "; n = "пожалуйста, введите номер формула: "; l = "введите, пожалуйста, порядок вычисления: "; an = "Ответ заключается в: "; rig = "Точность: "; } else { System.out.println("没有那种语言!默认语言为简体中文,祝您愉快"); }
UML图
运行截图
分数部分支持多运算符
Junit测试图
测试InfixToSuffix类转制分式成功
测试FractionCalculator类分数后缀式计算成功
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务需要多少时间 | 1000 | 1000 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 40 | 50 |
· Design Spec | · 生成设计文档 | 40 | 40 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 50 | 60 |
· Design | · 具体设计 | 100 | 200 |
· Coding | · 具体编码 | 100 | 200 |
· Code Review | · 代码复审 | 100 | 200 |
· Test | · 测试(自我测试,修改代码,提交修改) | 200 | 200 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 20 | 20 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 20 |
合作伙伴
姓名:莫礼钟学号:20162319
主要工作:构思结构,提供思路,检查错误。
博客链接:点击此处→
相关文章推荐
- 20162302 - 20162319 结对编程项目-四则运算(挑战出题)(第三周)
- 20162302 - 20162319 结对编程项目-四则运算(第一周)
- 20162322 朱娅霖 结对编程项目-四则运算 第二周最终版总结
- 20162330 结对编程项目-四则运算 第二周 整体总结
- 结对编程项目-四则运算-第二周总结
- 结对编程项目-四则运算(第二周总结)
- 齐力锋-刘先润 结对编程项目-四则运算(第二周)
- 20162303 结对编程项目-四则运算 第二周输出阶段总结博客
- 结对编程项目-四则运算(第二周)
- 20162319-20162302结对编程(四则运算)第一周阶段总结
- 20162322 朱娅霖 结对编程项目-四则运算 第一周阶段性总结
- 20162303 结对编程项目-四则运算 第一周输出阶段总结博客
- 结对编程项目-四则运算-第二周阶段总结 20162305李昱兴
- 20162317-20162315结对编程(四则运算)第二周阶段总结
- 结对编程项目 “四则运算”第一周阶段性总结
- 结对编程项目-四则运算
- 结对编程项目-四则运算(总结)
- 20162311 结对编程项目-四则运算 阶段总结
- 20162317-20162315结对编程(四则运算)第二周阶段总结
- 结对编程项目---四则运算(代码篇)