gpt4 book ai didi

java - 如何向表达式求解器添加运算顺序?

转载 作者:行者123 更新时间:2023-12-01 18:41:26 25 4
gpt4 key购买 nike

好吧,所以我正在尝试制作一个字符串表达式求解器,以便用户可以输入一个字符串,例如 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;
}
}

最佳答案

将表达式拆分为两个更简单的表达式,然后使用递归。

您必须严格按照此顺序执行以下步骤,否则会弄乱操作顺序。

  1. 寻找最右边的+号。如果存在这样的+,则使用递归计算其左侧的子表达式,然后计算其右侧的子表达式,然后将它们相加并返回结果。
  2. 如果没有 + 号,则查找最右边的 - 号,前面有一个数字(也就是说,它是减法,而不是负数)。如果存在这样一个 -,则使用递归计算其左边的子表达式,然后计算其右边的子表达式,然后将它们相减并返回结果。
  3. 如果没有 + 或 - 号,则查找最右边的 * 号。如果存在这样的*,则使用递归计算其左侧的子表达式,然后计算其右侧的子表达式,然后将它们相乘并返回结果。
  4. 如果没有 +、- 或 * 符号,则查找最右边的 * 符号。如果存在这样的*,则使用递归计算其左侧的子表达式,然后计算其右侧的子表达式,然后将它们相除并返回结果。如果您使用整数,则必须考虑是否需要整数除法或 float 。您可能还想对除以零进行某种检查。
  5. 如果没有 +、-、* 或/,那么您所拥有的只是数字和空格。也许是一个负面信号。去掉空格,解析它并返回它。

示例:“6 - 5 - 4 + 3 * -2”

  • 首先,在 + 处拆分,并使用递归计算“6 - 5 - 4 ”和“3*-2”。
  • 对于“6 - 5 - 4 ”,在第二个 - 处拆分,然后使用递归评估“6 - 5”和“4”。
  • 对于“6 - 5”,在 - 处拆分,并使用递归计算“6”和“5”。
  • 对于“3 * -2”,在 * 处拆分,因为 - 前面没有数字。使用递归计算“3 ”和“-2 ”。
  • 对于“6”、“5”、“4”、“3”和“-2”中的每一个,没有运算符,因此我们只需去掉空格并解析即可。
  • 我们的计算结果将为“((6-5)-4)+(3*-2)”,因此运算顺序正确。

关于java - 如何向表达式求解器添加运算顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com