模块代码地址

两个地址是一样的,为了方便,所以把测试的代码很模块代码放在一起git了。

封装阶段

public class Core {
public static StringBuffer Suffix(StringBuffer infix){
Stack<Character> stack=new Stack <Character>();
StringBuffer suffix=new StringBuffer();
int i=0;
char tempchar=infix.charAt(i++);
char tempchar2=' ';
try {
while (tempchar!='='){
switch (tempchar){
case '(':
stack.push(tempchar);
tempchar=infix.charAt(i++);
break;
case ')':
while (stack.peek()!='('){
tempchar2=stack.pop();
suffix.append(tempchar2);
suffix.append(' ');
if (stack.empty()) {
break;
}
}
if (!stack.empty()) {
stack.pop();
}
tempchar=infix.charAt(i++);
break;
case '+':
case '-':
while (!stack.empty()&&stack.peek()!='('){
tempchar2=stack.pop();
suffix.append(tempchar2);
suffix.append(' ');
}
stack.push(tempchar);
tempchar=infix.charAt(i++);
break;
case '×':
case '*':
case '/':
case '÷':
Character ch=new Character(' ');
if (!stack.empty()) {
while((ch=stack.peek()).equals('×')||(ch=stack.peek()).equals('÷'))
{
tempchar2=stack.pop();
suffix.append(tempchar2);
suffix.append(' ');
if (stack.empty()) {
break;
}
}
}
stack.push(tempchar);
tempchar=infix.charAt(i++);
break;
case ' ':
tempchar=infix.charAt(i++);
break;
default:
while(tempchar<='9'&&tempchar>='0')
{
suffix.append(tempchar);
tempchar=infix.charAt(i++);
}
suffix.append(' ');
break;
} }
while(!stack.empty())
{
tempchar2=stack.pop();
suffix.append(tempchar2);
suffix.append(' ');
} suffix.append('\0');
} catch (Exception e) {
e.printStackTrace();
}
return suffix;
} //根据后缀表达式计算结果(小数格式的String类型)
public static String Calculate(StringBuffer suffix){
int i=0;
char tempchar=suffix.charAt(i++);
double []answer=new double[20];
int top=0,d;
String Answer= null;
try {
while (tempchar!='\0'){
switch (tempchar){
case '+':
answer[top-1]=answer[top-1]+answer[top];
top--;
tempchar=suffix.charAt(i++);
break;
case '-':
answer[top-1]=answer[top-1]-answer[top];
top--;
tempchar=suffix.charAt(i++);
break;
case '*':
case '×':
answer[top-1]=answer[top-1]*answer[top];
top--;
tempchar=suffix.charAt(i++);
break;
case '/':
case '÷':
try {
if(answer[top]!=0)
answer[top-1]=answer[top-1]/answer[top];
else
{
System.out.println("\n\t除零错误!\n");
throw new InvalidExpression("无效的表达式");
}
} catch (InvalidExpression invalidExpression) {
invalidExpression.printStackTrace();
System.exit(0);
}
top--;
tempchar=suffix.charAt(i++);
break;
case ' ':
tempchar=suffix.charAt(i++);
break;
default:
d=0;
while(tempchar>='0'&&tempchar<='9')
{
d=10*d+tempchar-'0';//将数字字符转化为对应的数值
tempchar=suffix.charAt(i++);
}
top++;
answer[top]=d;
break;
}
}
Answer = null;
if (top!=1){
throw new InvalidExpression("无效的表达式");
}
Double an=new Double(answer[top]);
Answer = new String(an.toString()); }catch (InvalidExpression invalidExpression) {
invalidExpression.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return Answer;
}
}

在封装的过程中遇到的困难,以及是如何解决的:

对于封装首先想到几天前学习的软件工程的知识,关于模块的分解、抽象,恰好与本次的任务吻合,可以理论用于实践。上图是我画的UML图,在尝试在学习中,算不上很规范,但能基本看懂大概的结构。

因为之前的代码基于结构化编程,运用函数思想,所以在本次封装过程中很好的将功能抽象出来,这次完成的虽然不是很完美,但后期可以通过老师的指导不断改进。

单元测试阶段

单元测试代码 此处粘贴单元测试代码(用一对 ``` 把代码括起来)


@Before
public void before() throws Exception {
} @After
public void after() throws Exception {
} /**
*
* Method: Suffix(StringBuffer infix)
*
*/
@Test
public void testSuffix() throws Exception {
Core s=new Core();
s.Suffix(new StringBuffer("1+2+3="));
s.Suffix(new StringBuffer("1+2×3="));
s.Suffix(new StringBuffer("1+2÷3="));
s.Suffix(new StringBuffer("1÷2×3="));
s.Suffix(new StringBuffer("1÷+2×3="));
s.Suffix(new StringBuffer("1÷2*3="));
s.Suffix(new StringBuffer("1÷0×3="));
s.Suffix(new StringBuffer("1÷2×0=")); } /**
*
* Method: Calculate(StringBuffer suffix)
*
*/
@Test
public void testCalculate() throws Exception {
Core s=new Core();
s.Calculate(new StringBuffer("1 2 + 3 +"));
s.Calculate(new StringBuffer("1 + 2 + 3 +"));
s.Calculate(new StringBuffer("1 2 +"));
s.Calculate(new StringBuffer("1 2 × 3 +"));
s.Calculate(new StringBuffer("1+ + 2 × 3 +"));
} }

单元测试运行结果(截图,含测试是否全部通过,代码覆盖率等)





在编写单元测试代码过程中遇到的困难,以及是如何解决的

按照老师提供的教程,一开始看不懂,需要自己慢慢琢磨,Junit包,不知道是哪个,IDEA上找到有好多个,后来自己在网上找一个发现可以用。

下面提供它的下载网址。

链接:http://pan.baidu.com/s/1o84pWQQ 密码:1mda

别的大问题没有,关于对Core的测试,计算表达式都是自己按照规则生成的,不会出现不规则的情况,

所以对于测试情况的全面性没有更深一步进行。

感受(小结)

Junit很方便,测试的时候,不能以编程时的思维方式去看待问题,否则有些问题永远测试不出来。

需要打破常规的思路,不能认为自己的代码运行结果都是对的。

最新文章

  1. 基于Swiper 2.7.6实现的带缩略图功能的轮播图
  2. Immutable笔记
  3. Linux提权基础
  4. 练习2 练习目标-使用引用类型的成员变量:在本练习中,将扩展银行项目,添加一个(客户类)Customer类。Customer类将包含一个Account对象。
  5. 在Eclipse中创建Maven多模块工程的例子
  6. MySQL mac 安装
  7. 27Where条件筛选数据-简单(必学)-天轰穿sqlserver视频教程
  8. ux.form.field.SearchField 列表、树形菜单查询扩展
  9. URL请求过程
  10. LibVLC audio controls
  11. 3361: [Usaco2004 Jan]培根距离
  12. hdu 5119(2014北京)
  13. cocos 常用组件
  14. HDU 2009 求数列的和
  15. PHP博大精深,入门容易,精通难,怎么才能真正学好PHP
  16. where(泛型类型约束)
  17. Linux 用户切换、修改用户名、修改密码
  18. Debian 9 VIM 使用鼠标右键复制
  19. bzoj 4084 双旋转字符串
  20. UNDERSTANDING ITWEEN CALLBACKS

热门文章

  1. LoadRunner监控tomcat
  2. Java基础知识介绍
  3. (二)Maven 基本概念——依赖、生命周期、仓库管理、聚合&amp;继承
  4. C-printf/sprintf/snprintf中的类型转换详解
  5. netstat命令初探
  6. 无线网络RSSI、SSID、BSSID
  7. Atitit.论垃圾文件的识别与清理&#160;文档类型垃圾文件&#160;与api概要设计pa6.doc
  8. Knockout JS 演示样例
  9. jcosole使用方法
  10. Windows Server 2008 R2入门之用户管理