这里的任何人都可以指导我这个问题。我是Java的新手,我们的教授给了我们一个名为“科学计算器”的实验练习。
这个程序将解决这种表达方式: 1. 6+(4 * 6) 2.((50 + 25)/ 5)+12 3. 15/3 * 3
我有一个代码,但它只会添加以下表达式。如果用户输入另一个表达式,如:
(79 + 34)-5或任何......
我的节目会发疯。
他告诉我们我们可以使用Stack或Arrays,但我的问题是我不知道从哪里开始。谢谢!
更新:我找到了答案
答案 0 :(得分:0)
我想你的教授很想看到你从这个任务中学习Shunting-yard算法。从帖子Explanation on Shunting-yard algorithm,Look for Detailed example from Wiki可以看到一些很好的解释。我认为正确的概念是一个好的开始。如果你能自己完成作业,这很有趣。
答案 1 :(得分:0)
你需要记住操作的顺序 - BODMAS(括号,(幂),除法,乘法,加法,减法)并按此顺序求解。
你可以通过使用递归隐式使用堆栈,但是你需要有一个合理的退出策略才能很好地解决问题。执行你找到的操作,直到你得到一个左括号,找到结束括号,并将其内容发送到同一个函数,当你没有更多的标记要解析时返回。
伪代码:
int recursivefunc(String expression){
result = 0;
while (have token){
if token is add/subtract/divide -{
result = result + "token operation result"
}else if token is open bracket{
find end bracket (not the first if there are more open brackets)
result = result + recursivefunc(sub-expression)
}
}
return result
}