使用Java解决数学表达式

时间:2014-07-16 08:50:38

标签: java arrays stack

这里的任何人都可以指导我这个问题。我是Java的新手,我们的教授给了我们一个名为“科学计算器”的实验练习。

这个程序将解决这种表达方式: 1. 6+(4 * 6) 2.((50 + 25)/ 5)+12 3. 15/3 * 3

我有一个代码,但它只会添加以下表达式。如果用户输入另一个表达式,如:

(79 + 34)-5或任何......

我的节目会发疯。

他告诉我们我们可以使用Stack或Arrays,但我的问题是我不知道从哪里开始。谢谢!

更新:我找到了答案

2 个答案:

答案 0 :(得分:0)

我想你的教授很想看到你从这个任务中学习Shunting-yard算法。从帖子Explanation on Shunting-yard algorithmLook 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
}