我需要修改evalE
和evalMD
,以便程序现在可以使用+, - ,*,/运算符和正整数或负整数操作数来计算算术表达式。我已经使用它来处理基本方程式,但是如果我将等式25 + -2放入,我会收到错误。以下是我到目前为止的情况:
int evalE(String exp)
{
int result = 0;
String tmp="";
char ch;
for (int i=exp.length()-1;i>=0;i--)
{ ch = exp.charAt(i);
if (ch == '+')
{
result += evalMD(tmp);
tmp = "";
}
else if (ch == '-')
{
result -= evalMD(tmp);
tmp = "";
}
else
tmp = ch+tmp;
}
if (exp.charAt(0) != '+' && exp.charAt(0) != '-')
result += evalMD(tmp);
return result;
}
int evalMD(String exp)
{
int result = 1;
String tmp = "";
char previousOP = '*';
for (int i=0;i<exp.length();i++)
{
char ch = exp.charAt(i);
if (ch == '*' || ch == '/')
{
if (previousOP == '*')
result *= Integer.parseInt(tmp);
else
result /= Integer.parseInt(tmp);
tmp = "";
previousOP = ch;
}
else
tmp = tmp+ch;
}
if (previousOP == '*')
result *= Integer.parseInt(tmp);
else
result /= Integer.parseInt(tmp);
return result;
}
为什么我的等式不适用于上述情况?任何帮助深表感谢。谢谢。
答案 0 :(得分:0)
看了你的代码之后,似乎如果第二个数字是负数,(无论操作数),程序将发送错误。我建议制作一个场景,其中第二个数字,如果是负数,将括在括号中。例如25 +( - 10)。通过这样做,应该更容易看出是否会出现负面影响。 另外,也许您应该检查代码以获得除法操作数。它现在只进行整数除法,(24/20 = 1)但是如果你想要它做一个真正的除法,你必须将方法的返回类型改为“加倍”。