主类Main2


/**
* 基本计算
* @param x
* @param y
* @param operator
* @return
*/
public static double account(double x, double y, String operator)
{
if(operator.equals(Operator.ADD))
{
return x + y;
}
else if(operator.equals(Operator.MINUS))
{
return x - y;
}
else if(operator.equals(Operator.MULTIPLY))
{
return x * y;
}
else if(operator.equals(Operator.DIVIDE))
{
return x / y;
}
return 0;
}

public static void main(String[] args)
{
String formula = "(1 + 3 * 2) / {[2 * ( 1 + 3)] - 3} - (3 * 2)";

//小中大括号正则匹配
String[] gh = {"\\(.*?\\)", "\\[.*?\\]", "\\{.*?\\}"};

//先计算小括号,再计算中括号,大括号
for(int i = 0; i < gh.length; i++)
{
Pattern pattern = Pattern.compile(gh[i]);
Matcher matcher = pattern.matcher(formula);
while(matcher.find())
{
//获得括号公式
String f = matcher.group();

//计算括号内公式
double value = accountFormula(f.replace(" ", ""), true);

//将计算的值放入原公式
formula = formula.replace(f, value + "");
}
System.out.println(formula);
}

//计算最后剩余公式
double value = accountFormula(formula, false);
System.out.println("结果:" + value);
}

/**
* 计算不包含括号的公式
* @param formula 公式
* @param isClearGh 是否去括号
* @return
*/
public static double accountFormula(String formula, boolean isClearGh)
{
if(isClearGh)
{
//去括号
formula = formula.substring(1, formula.length() - 1);
}

//计算乘除
formula = accountMultiplyAndDivide(formula);

//计算加减
double ret = accountMinusAndAdd(formula);

return ret;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值