我正在编写一个计算器类来学习 Java。到目前为止,它可以处理简单的函数,例如2+2
,2^2
等,但我正在尝试实现 Shutting Yard 算法,以便它可以处理更复杂的表达式。
我是数据结构的新手,没有指南就无法编写这样的代码,因此经过研究,我在网上找到了几个示例,并正在关注其中的一个。其他网站,如果您有兴趣:1 , 2。我选择了第一个链接站点,因为我对它的理解是三个中最好的。
但我不明白作者在这里做什么:
/** in stack precedence **/
private static final int[] isp = {0, 19, 12, 12, 13, 13, 13, 0};
/** incoming character precedence **/
private static final int[] icp = {20, 19, 12, 12, 13, 13, 13, 0};
我知道这与运算符的优先级有关,但我不确定这些数字来自哪里。有人可以澄清一下吗?
另外,我的计算器有一个作者没有包含的指数方法。如果我要包含它,它是否会比除了流结束/EOS 和默认选项之外的所有内容具有更高的优先级?
(如果你有更好的调车场算法实现,请提出建议!)