好吧,所以我正在尝试创建一个表达式为字符串的解算器,以便用户可以输入一个字符串,例如2 + 4 * 5/10,它将打印出答案,4我写了一些代码,但它不适用于操作顺序;它只是按操作符的顺序求解方程式 - 例如2 + 4 * 5/10会产生3,这是不正确的。我如何使它首先执行乘法和除法,然后加法和减法? 这是我现在的代码:
class Expressions
{
String E;
void SetE(String e)
{
E = e;
}
int EvalE()
{
int res = 0;
int temp = 0;
char op = '+';
for(int i=0;i<E.length();i++)
{
if(E.charAt(i)=='*'||E.charAt(i)=='/'||E.charAt(i)=='+'||E.charAt(i)=='-')
{
if(op=='*')res*=temp;
else if(op=='/')res/=temp;
else if(op=='+')res+=temp;
else res-=temp;
temp=0;
op=E.charAt(i);
}
else
{
temp = temp*10+E.charAt(i)-'0';
}
}
if(op=='*')res*=temp;
else if(op=='/')res/=temp;
else if(op=='+')res+=temp;
else res-=temp;
return res;
}
}
答案 0 :(得分:1)
使用两个for
循环。
在第一个循环中,搜索*
和/
运算符。评估该部分并将该部分字符串替换为评估结果。
在您的第二个循环中,执行您已经完成的所有+
和-
。
因此,对于您使用的示例2+4*5/10
,您的第一个循环会查找*
或/
。找到*
后,它会评估4*5
。这是20
,因此字符串被修改为2+20/10
。再次检查,它会找到/
,并将字符串修改为2+2
。
现在,您将完成第二个循环,并获得4
。
答案 1 :(得分:1)
您需要执行两个步骤而不是一个步骤。在第一步中,您将方程解析为reverse polish notation,然后在第二步中运行并计算结果。好的奖金是你得到(几乎)免费的括号支持: - )
答案 2 :(得分:1)
将表达式拆分为两个更简单的表达式,然后使用递归。
您必须按照此顺序执行以下步骤,否则您将搞乱操作顺序。
示例:“6 - 5 - 4 + 3 * -2”