A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hmr8 中级黑马   /  2013-4-23 16:54  /  1366 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java中表达式怎么弄,如a*(b-(c-d))怎样保证优先级和结果正确,注表达式在键盘读出!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
不太懂,你想问的是什么?
回复 使用道具 举报
运算符优先级问题。提高其优先级就在对应算式上加上括号即可。Java中的运算符按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ * / % + - << >> >>> <> < = > \ == != &^& & || ? := op=
回复 使用道具 举报
封装成StringBuffer或者StringBuilder
每次计算第一个() 然后替换 知道把所有的()替换完之后
进行乘除操作并替换
然后加减操作并替换
然后就是结果了
其实就是递归....


不然你就用栈来做 用栈现在不会了

只能给你模拟一下了
加入 5+6+(6+8)+(7-9)
得到运算结果
1,5+6+14+(7-9)
2,5+6+14-2
3,13+14-2
4,27-2
5,25
如果里面的 有那个括号嵌套的话
也没关系,因为 括号最终会分解为 + - * / 这样的简单操作而不包含括号
就如(5+(5*6+(6/2)))
可以分解为 5  +   (5*6+(6/2))
而  (5*6+(6/2)) 可以分解为 5*6 + (6/2)
(6/2) 直接元算得到3
5*6 + (6/2) --->5*6+3 --> 30+3 -->33
所以5  +   (5*6+(6/2))--->5+33-->38
(5+(5*6+(6/2)))--->38

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马