java问题,怎么将字符串型的数学表达式计算出结果?

例如“2*3+6+8”怎么得出20来?不要考虑括号和运算优先级。... 例如“2*3+6+8”
怎么得出20来?
不要考虑括号和运算优先级。
展开
 我来答
Monkey家园
推荐于2016-10-09 · TA获得超过5635个赞
知道大有可为答主
回答量:1134
采纳率:60%
帮助的人:593万
展开全部
这涉及到一个技术:【表达式分析】

可以利用到栈数据结构来分析,也可以硬来,按人脑怎么算,你就怎么算。

如果你只是想解决这个问题,其中一个简单的思路是:

你要解决的问题实际是算出这样格式的字符串表达式的结果:
<number><op><number><op><number><op><number>...

<number>表示任意数.比如41,55,66234,-244

<op>表示任意运算符,比如+,-,*,/,%,^

把<op>按优先级排列。

先算完优先级高的,再算优先级低的。“5+2*3*1”的具体步骤是:

先算优先级高的2*3=6

用6替换掉2*3,

得到 "5+6*1"

再检测是否还有高优先级的*,有则
6*1=6,用"6"替换掉"6*1"

得到"5+6"

接着没有高优先级的运算符字符了,可以算低优先级字符
接着得到用"11"替换"5+6"。

如果你还需要其他更为精妙和复杂的方法,建议你分别搜索关键字:

“栈 表达式求值”
“编译原理 表达式求值”
“树 表达式求值”

因为表达式分析是一门复杂的技术,不仅仅是四则运算,还包括所有语言分析(包括伪自然语言分析)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式