一道面试题

猫儿爷爷 2010-05-20 05:09:51
给定一个字符串“5*(5+9)/7”编写程序,使其计算出结果?

谁给我个思路?? 用正则??? 可那个括号有要怎么判断???
...全文
348 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
轻尘 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 scomouse 的回复:]
根据该表达式构造为一棵二叉树,中序遍历即可
[/Quote]

1楼正解,这个是考编译原理了。
q956140151 2010-05-24
  • 打赏
  • 举报
回复
传成后缀式。'5*(5+9)/7'转成 559+*7/然后再计算。有算法的,你可以查一下。我那个代码没找到,不好意思。
i李小武 2010-05-24
  • 打赏
  • 举报
回复
同意用数据库的方法,应该问题。
不过LZ如果知道动态代理的话,可以用java的编译compiler类做,这个就是麻烦,能把字符串动态编译java
猫儿爷爷 2010-05-24
  • 打赏
  • 举报
回复
- -~ 用Jav写啊 都回来 大家都跑远了
小_Y 2010-05-21
  • 打赏
  • 举报
回复

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("print(eval('5*(5+9)/7'))");

很水。
swjtu184041 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lu76689614 的回复:]
select 5*(5+9)/7 v from dual
你到数据库跑下这条语句看看
[/Quote]
Server2000不可以 执行!
这个表“dual” 是怎么回事!
zuoguodang 2010-05-21
  • 打赏
  • 举报
回复
java利用堆栈,JavaScript里面有eval,Java可以调用ScriptManager吧,你还是用最基本的办法吧,锻炼一下思维。
日辰言成 2010-05-21
  • 打赏
  • 举报
回复
记得以前用的是堆栈来算的~
littleJP 2010-05-21
  • 打赏
  • 举报
回复
学习 学习、
mp1034091594 2010-05-21
  • 打赏
  • 举报
回复
java算法与数据结构上有。
中序 转 后序 然后 解析后序。
gggggod 2010-05-21
  • 打赏
  • 举报
回复
不懂,学习
jiajerry0 2010-05-20
  • 打赏
  • 举报
回复
mark,学习下
焙焙龙 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lu76689614 的回复:]
这个方法不好吗?

String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
这个 方法不好吗 ?

把字符串的×replice成*

叫数据库运算 返回结果
[/Quote]

1,需要连接数据库
2,和数据库的语法相关,不够灵活

最基本的办法就是做词法分析

还有个思路,在JAVA中调用JS引擎,使用JS的eval()函数来做,也许可行
lu76689614 2010-05-20
  • 打赏
  • 举报
回复
select 5*(5+9)/7 v from dual
你到数据库跑下这条语句看看
lu76689614 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 c5153000 的回复:]

引用 10 楼 lu76689614 的回复:
这个方法不好吗?

String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
这个 方法不好吗 ?

把字符串的×replice成*

叫数据库运算 返回结果
你能详细给我解释下你说的那个数据库运算吗??? 有没有具体的例子呢?
[/Quote]

String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
s是你传进去的字符串

你编写个sql

连接数据库 查询这条sql语句

接受查询的结果

查询结果就是运算的结果

不明白吗?

我用的oracle数据库


猫儿爷爷 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lu76689614 的回复:]
这个方法不好吗?

String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
这个 方法不好吗 ?

把字符串的×replice成*

叫数据库运算 返回结果
[/Quote]你能详细给我解释下你说的那个数据库运算吗??? 有没有具体的例子呢?
lu76689614 2010-05-20
  • 打赏
  • 举报
回复
这个方法不好吗?

String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
这个 方法不好吗 ?

把字符串的×replice成*

叫数据库运算 返回结果
guoliang2010 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 penngrove 的回复:]

设置运算符优先级,先把中缀表达式变成后缀表达式,然后用栈对后缀表达式进行计算。很传统的算法。
[/Quote]

正是,这种方法在C++中用的很广泛
猫儿爷爷 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lu76689614 的回复:]
String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
数据库处理 灵活

String s="5×(5+9)/7";
int s1 = Integer.parseInt(s.substring(0,1));
int s4 = Integer.parseInt(s.substring(3,4));
int s6 = I……
[/Quote]
貌似还是要一个一个拿出来转换 然后再做运算???? 有没简单些的方法 比如 用正则 可是正则怎么判断括号呢?????
a21768541 2010-05-20
  • 打赏
  • 举报
回复
String s="5×(5+9)/7";
String sql="select "+s+" v from dual";
数据库处理 灵活

这样可以?????
加载更多回复(6)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧