【发布时间】:2014-01-23 19:59:03
【问题描述】:
我正在用 Java 创建一个计算器,并且正在努力想出一种处理负数的方法,到目前为止我可以解析一个表达式,例如:
((4-3)*(4/2))*2
变成:
[4.0, -3.0, +, 4.0, 2.0, /, *, 2.0, *]
但是我不知道如何处理包含否定的表达式,例如:
2*(-2-3)
到目前为止,我有它,所以当遇到负值时,它将前面的数字乘以 -1 并在列表的末尾添加一个 +,所以表达式变成这样:
[2.0, -2.0, -3.0, +, +, *]
这导致我的程序出现许多错误,任何人都可以帮助提供更好的方法来处理负面影响。
非常感谢您的帮助
【问题讨论】:
-
您可以通过在任何负数之前添加 0 来处理它。因此,
2*(-2-3)将变为2*(0-2-3)。 -
感谢您的快速回复,我已经尝试过了,但是当我有一个像 8*-2 这样的表达式时,我会得到列表 [8.0, 0.0, *, -2.0, +] 这会导致-2的答案
-
那你解析错了,8*-2应该是[8, 0, 2, -, *],你读到8 => [8],你读到*然后调用解析下一个参数,你读到 - 和 2 => [8, 0, 2, -],现在你完成 * => [8, 0, 2, -, *]
-
也许你应该发布你是如何解析的,问题可能就在那里。
标签: java list parsing calculator negative-number