您的位置:首页 > 其它

作业5 四则运算 测试与封装 5.1

2015-04-30 13:31 597 查看
开发环境:eclipse

结对同伴 :32 马志磊

同伴博客:http://www.cnblogs.com/mac54321/

程序介绍:

  1.第一阶段目标 - 把计算的功能封装成类。

  2.设计测试用例:用白盒与黑盒测试设计技术,为计算核心设计测试用例。

  3.在实验环境中(如MyEclipse集成开发环境+Junit测试框架)运行测试用例,分析测试结果,找出程序问题,给出改进前后的代码对照。

程序代码:

Calculator.java

public class Calculator {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String exp=new String("25+5+30+6=");
Core c=new Core();
String result=c.jisuan(exp);
System.out.print(result);
}

}


Core.java

public class Core {
public String jisuan(String str) {
String num[] =new String[10];
int number[] =new int[10];
char operator[]=new char [10];
int brackets=0,endbrackets=0;
int posbra=0,endposbra=0;
int j;int k;
double result=0;
for(int i=0;i<10;i++)
{
num[i]="";
number[i]=0;
}
j=0;k=0;
for(int i=0;str.charAt(i)!='=';i++)
{
if(str.charAt(i)>='0' && str.charAt(i)<='9' ||  str.charAt(i)=='.')
{
num[j]=num[j]+ str.charAt(i);
}
else if(str.charAt(i)=='+' || str.charAt(i)=='-' || str.charAt(i)=='*' || str.charAt(i)=='/')
{
j++;
operator[k]=str.charAt(i);
k++;
}
else if(str.charAt(i)=='(')
{
brackets++;
posbra=i;
}else if(str.charAt(i)==')'){
endbrackets++;
}
}
if(brackets!=endbrackets)
return "括号不对称";
if(j==0)
return String.valueOf(Double.parseDouble(num[0]));
else
{
int pos=-1;
String str2=new String("");
for(int i=0;i<=k;i++)
{
if(operator[i]=='*' || operator[i]=='/')
pos=i;
}
if(pos==-1)
pos=0;
for(int i=0;i<pos;i++)
str2=str2+num[i]+String.valueOf(operator[i]);
str2=str2+op(Double.parseDouble(num[pos]),Double.parseDouble(num[pos+1]),operator[pos])+String.valueOf(operator[pos+1]);
for(int i=pos+2;i<=j;i++)
str2=str2+num[i]+String.valueOf(operator[i]);            return jisuan(str2+"=");
}
}
public double op(double a,double b,char operator)
{
switch(operator)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
}
return 0;
}

}


初步测试结果:

(1)



(2)



(3)



(4)



然后发现当除数为0的时候 出现了错误 !

然后我们进行了修改

在原来的Core.java的

for(int i=0;i<=k;i++)
{
if(operator[i]=='*' || operator[i]=='/')
pos=i;
}


for 循环中 添加多一个判断 检测除数是否为0 如果为0则提示错误
修改如下:

for(int i=0;i<=k;i++)
{
if(operator[i]=='*' || operator[i]=='/')
pos=i;
if(operator[i]=='/')
if(Double.parseDouble(num[i+1])==0)
return "公式错误!除数不能为0";
}


然后运行结果:



然后当用户发现输入"1+1++1="的公式时 又出现这样的错误 不能连续输入两个或以上的运算符


然后我们又做了如下的修改:

在原来的Core.java的

for(int i=0;str.charAt(i)!='=';i++)
{
if(str.charAt(i)>='0' && str.charAt(i)<='9' ||  str.charAt(i)=='.')
{
num[j]=num[j]+ str.charAt(i);
}
else if(str.charAt(i)=='+' || str.charAt(i)=='-' || str.charAt(i)=='*' || str.charAt(i)=='/')
{
j++;
operator[k]=str.charAt(i);
k++;
}
else if(str.charAt(i)=='(')
{
brackets++;
posbra=i;
}else if(str.charAt(i)==')'){
endbrackets++;
}
}


修改成

for(int i=0;str.charAt(i)!='=';i++)
{
if(str.charAt(i)>='0' && str.charAt(i)<='9' ||  str.charAt(i)=='.')
{
flag=false;
num[j]=num[j]+ str.charAt(i);
}
else if(str.charAt(i)=='+' || str.charAt(i)=='-' || str.charAt(i)=='*' || str.charAt(i)=='/')
{
if(flag==true) return "公式错误!不能连续输入运算符";
flag=true;
j++;
operator[k]=str.charAt(i);
k++;
}
else if(str.charAt(i)=='(')
{
brackets++;
posbra=i;
}else if(str.charAt(i)==')'){
endbrackets++;
}
}


就是多添加了一个标志flag,当连续出现运算符时就返回错误信息!

运行结果:





目前括号还没有完善,暂时还没想出好的思路去实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: