资源简介
1)有运算优先级(括号最先,乘方次之,乘除再次之,加减最后等)
2)思路:按运算优先级将数学式子步步化简
3)数学式子用字符串存储,负数用中括号[]括起来表示,如:[-93]
代码片段和文件信息
package Calculator;
/*
* 数学计算类
* 负责数学式子(不包含“=“号)的数学运算有运算优先级(括号最先乘方次之乘除再次之加减最后等)
* 思路:按运算优先级将数学式子步步化简
* 数学式子用字符串存储负数用中括号[]括起来表示如:[-93]
* (测试通过)
*/
public class Calculate
{
/*
* 服务:数学运算方法--对外接口包括本地化数学式子格式、综合加减乘除乘方和括号等运算(功能可扩展)
* 参数:要进行运算的数学式子
* 返回:运算的结果或出错提示
* (测试通过)
*/
public String calculate(String formula)
{
String result=““;
formula=formula.replace(“ “““);//去掉式子中的所有空格
//用小括号替换大括号
formula=formula.replace(‘{‘‘(‘);
formula=formula.replace(‘}‘‘)‘);
//用小括号替换中括号
formula=formula.replace(‘[‘‘(‘);
formula=formula.replace(‘]‘‘)‘);
result=matchRemoveBracket(formula);
if(result.startsWith(“错误“))return result;
result=basicArithmetic(result);
System.out.println(“原式:“+formula);
System.out.println(“运算结果:“+result);
return result;
}
/*
* 服务:括号运算(包括括号匹对和去掉括号)从‘)‘离式子开头最近的那一对括号开始
* 参数:数学式子规定括号前后紧挨着的只能是运算符或为空而不能是数字如:
* 87(35+3)2 错误
* (-24)^2 正确
* (23*34/(3*4)) 正确
* 4/((-64)^3) 正确
* 返回:去掉所有括号的式子或出错提示
* (测试通过)
*/
private String matchRemoveBracket(String formula)
{
System.out.println(“括号运算开始!“);
System.out.println(“括号运算:“+formula);
if(formula.isEmpty())return “0“;
if(formula.startsWith(“错误“))return formula;
int leftright;
String number=““;
left=formula.lastIndexOf(‘(‘);
right=formula.indexOf(‘)‘);
while(left!=-1||right!=-1)
{
if((left==-1&&right!=-1)||(left!=-1&&right==-1))
return “错误--输入错误:括号不匹配!“;
if(left>right)
{
left=formula.substring(0right).lastIndexOf(‘(‘);
if(left==-1)return “错误--输入错误:括号不匹配!“;
}
if(left!=0){
//规定括号前后紧挨着的只能是运算符或为空
switch(formula.charAt(left-1))
{
case ‘+‘:case ‘-‘:case ‘*‘:case ‘/‘:case ‘^‘:case ‘(‘:break;
default:return “错误--输入错误:括号前后不能紧挨着数字!“;
}
}
if(right!=formula.length()-1){
switch(formula.charAt(right+1))
{
case ‘+‘:case ‘-‘:case ‘*‘:case ‘/‘:case ‘^‘:case ‘)‘:break;
default:return “错误--输入错误:括号前后不能紧挨着数字!“;
}
}
//计算括号里面的式子在此没有括号嵌套“从‘)‘离式子开头最近的那一对括号开始“保证了这一点
number=basicArithmetic(formula.substring(left+1right));
if(number.startsWith(“错误“))return number;
if(number==“NaN“)return “错误--运算错误!“;
if(Double.parseDouble(number)>=0)//基础运算结果非负数
{
if(right==formula.length()-1)formula=formula.substring(0left)+number;
else formula=formula.substring(0left)+number+formula.substring(right+1);
}
else//基础运算结果为负数
{
if(right==formula.length()-1)formula=formula.substring(0left)+“[“+number+“]“;
else formula=formula.substring(0left)+“[“+number+“]“+formula.substring(right+1);
}
if(formula.startsWith(“错误“))return formula;
System.out.println(“括号运算:“+formula);
left=formula.lastIndexOf(‘(‘);
right=formula.indexOf(‘)‘);
}
System.out.println(“括号运算结束!“);
return formula;
}
////////////////////////////////////////////基础运算////////////////////////////////////////////
/*
* 服务:基础运算包括加减乘除乘方
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-01-13 03:17 Calculator\
文件 11947 2013-01-12 20:33 Calculator\Calculate.java
文件 3889 2013-01-12 09:34 Calculator\Calculator.java
- 上一篇:自动排课系统(课程表)
- 下一篇:信用风险评分卡研究_基于SAS的开发与实施
评论
共有 条评论