Java计算器(运算顺序)

cbwuti44  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(144)

如何告诉Java操作数的顺序?
嗯,我是相当新的编码和我的一个朋友在一个更高的课程被要求做一个计算器,我有兴趣在它将如何工作。
我搜索了它,我找到的解决方案几乎只是一个超基本的计算器,是代码,我可以做我自己(我很感激,因为有很多我不明白);但我在找更复杂的东西。
这些建议大致如下:

Double result = 0;

System.out.println ("First opperand:");
Num1 = scan.next double();

System.out.println ("Choose operation (+,-,*,/):");
Ope = scan.next();

System.out.println ("Second opperand:");
Num2 = scan.next double();

Switch (ope) {
 Case '+':
  Result = num1 + num2;
  break;

 Case '-':
  Result = num1 + num2;
  break;

//and so on for each different operand that you want to add
}

System.out.println (result);

问题是,我想计算器的思想是用户输入一个字符串形式的运算,然后计算器解释操作数和运算符,我想你可以用字符串类简单地做到这一点,告诉它在整个字符串中搜索连续的数字作为要创建的新opperands变量,并将其他任何内容作为运算符进行搜索,然后检查它们是否有效(我真的不知道如何正确编程,因为我仍然是一个非常新的,正如我之前所说)。
但真正的问题是,我如何告诉程序类似“20/((10+5)*2)"的运算顺序?
我想我可以处理基本的操作符,但是我怎么处理括号呢?
我不知道这是不是更高级,我甚至不明白答案,或者它实际上有点简单,我只是需要一些观点,但我真的很感兴趣,这就是我问的原因

k4ymrczo

k4ymrczo1#

您正在寻找的是一个合适的***解析器***,它可以将字符串转换为所谓的***解析树***,这样您就可以执行解析树所描述的操作。
因此,解析器会将字符串“20/((10+5)*2)”转换为以下解析树:

[/]
              /   \
             20   [*]
                 /   \
               [+]    2
              /   \
             10    5

解析器是信息论科学(也被称为“计算机科学”)的一个完整的子主题,它们不能用一个stackoverflow的答案来解释,但至少你现在有了一个名字,你可以用它来搜索。

falq053o

falq053o2#

您必须将优先级值与每个运算符关联起来,以定义它们的优先级(请参见C Operator Precedence)。

相关问题