作者:霍任芳 | 来源:互联网 | 2023-09-16 08:56
开发环境:eclipse结对同伴:32马志磊同伴博客:http:www.cnblogs.commac54321程序介绍:第二阶段目标-通过测试程序和API接口测
开发环境:eclipse
结对同伴 :32 马志磊
同伴博客:http://www.cnblogs.com/mac54321/
程序介绍:
第二阶段目标 - 通过测试程序和API 接口测试其简单的加减乘除功能。
比如:
-
最多4 个运算符
-
数值范围是 -1000 到 1000
-
精度是小数点后两位
第三阶段目标 - 通过测试程序和API 接口测试对于各种参数的支持。
源代码:
Core.java
import java.text.DecimalFormat;
import java.math.RoundingMode;
public class Core {
private int MAXNUM=10;//操作数
private int OP=10; //运算符
private int MAXrange=1000;//数值范围
private int MINrange=-1000;//数值范围
private int JD=2;//计算精度
public Core(int MAXNUM,int OP,int MAXrange,int MINrange,int JD){
this.MAXNUM=MAXNUM;
this.OP=OP;
this.MAXrange=MAXrange;
this.MINrange=MINrange;
this.JD=JD;
}
public Core(){
this.MAXNUM=10;
this.OP=10;
this.MAXrange=1000;
this.MINrange=-1000;
this.JD=2;
}
public void setMAXNUM(int MAXNUM){
this.MAXNUM=MAXNUM;
}
public void setOP(int OP){
this.OP=OP;
}
public void setMAXrange(int MAXrange){
this.MAXrange=MAXrange;
}
public void setMINrange(int MINrange){
this.MINrange=MINrange;
}
public void setJD(int JD){
this.JD=JD;
}
public String jisuan(String str) throws cuowu {
String num[] =new String[MAXNUM];
int number[] =new int[MAXNUM];
char operator[]=new char [OP];
int brackets=0,endbrackets=0;
int posbra=0,endposbra=0;
int j;int k;
double result=0;
boolean flag;
for(int i=0;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) throw new cuowu("公式错误!不能连续输入运算符");
flag=true;
j++;
if(j>MAXNUM-1)
throw new cuowu("操作数不能超过"+MAXNUM+"个!");
if(k>OP-1)
throw new cuowu("运算符不能超过"+OP+"个!");
operator[k]=str.charAt(i);
k++;
}
else if(str.charAt(i)=='(')
{
brackets++;
posbra=i;
}else if(str.charAt(i)==')'){
endbrackets++;
}
}
if(brackets!=endbrackets)
throw new cuowu("括号不对称!");
for(int i=0;i<=j;i++)
if(Double.parseDouble(num[i])>MAXrange || Double.parseDouble(num[i])
Calculator.java
public class Calculator {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String exp=new String("10.5222+10.222=");
Core c=new Core(10,10,500,-500,4);
try{
String result=c.jisuan(exp);
System.out.print(result);
}
catch(cuowu e){
e.printStackTrace();
}
}
}
我们在原来5.1的基础上增加了自定义异常 和各种参数设置。例如,最多几个运算符,数据范围是多少,还要设置计算的精度(保留几位小数)
测试结果
(1)计算的精度(保留几位小数)
(2)测试数值范围 超过500 就会出错 抛出异常
(3)测试运算符 超过4个就会出错 抛出异常
(4)测试操作数 超过5个就会出错 抛出异常
出现的问题及解决方法:
我们在小数点精度不知道如何进行做,然后我们通过网上学习,发现了DecimalFormat()类可以实现这个问题,我们通过学习与消化,把小数精度问题顺利解决了!