求一个表达式的算法

huhuan_dlut 2007-11-30 01:37:34
String s = "12+8*(2*3*4+5)+456-8/(5/2)";
设计一个好的算法计算该表达式的值
考虑优先级别
...全文
102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangbaokun 2007-11-30
  • 打赏
  • 举报
回复
javascript有个eval函数可以直接算
java中有没有我就不知道了
你可以用java.util.Stack类,然后自己设计,或者找本数据结构书看看上面应该有算法
syhan 2007-11-30
  • 打赏
  • 举报
回复
中缀-〉后缀 +栈
fanql_222 2007-11-30
  • 打赏
  • 举报
回复
好像在数据结构中有这么个东西,要两个堆栈,一个A栈放数字,一个B栈放操作符,遇到数字放A,遇到符号放B,同时比较前一个符号,如果现在的符号优先级比栈顶的高,则压栈,否则,提取A栈顶的数字和B栈顶的符号计算后压A栈,流程就这样,其中涉及到符号的优先级,其中最大的两个是),(,别的一样。
shan1119 2007-11-30
  • 打赏
  • 举报
回复
写了一段垃圾代码
    String s = "12+8*(2*3*4+5)+456-8/(5/2)"; 
String ret = replace(s);

System.out.println(ret);


public static String replace(String str){
String ret = str;
Pattern p = Pattern.compile("\\((.+?)\\)");
Matcher m = p.matcher(str);
while(m.find()){
String param = calculate(m.group(1));
ret = ret.replaceFirst("\\("+m.group(1).replaceAll("[*+]", "\\\\$0")+"\\)", param);

}
if(ret.matches("\\((.+?)\\)")) return replace(ret);

return calculate(ret);
}

public static String calculate(String str){
// System.out.println(str);
String ret = "";
Pattern p = Pattern.compile("(\\d+(\\.\\d+)?)([/*])(\\d+(\\.\\d+)?)");
Matcher m = p.matcher(str);
if(m.find()){
double pre = new Double(m.group(1)).doubleValue();
String code = m.group(3);
double pos = new Double(m.group(4)).doubleValue();
if("*".equals(code)) ret = pre * pos + "";
if("/".equals(code)) ret = pre / pos + "";
return calculate(str.replaceFirst(m.group(0).replaceFirst("\\*", "\\\\*"), ret));
}else {
p = Pattern.compile("(\\d+(\\.\\d+)?)([+-])(\\d+(\\.\\d+)?)");
m = p.matcher(str);
if(m.find()){
double pre = new Double(m.group(1)).doubleValue();
String code = m.group(3);
double pos = new Double(m.group(4)).doubleValue();
if("+".equals(code)) ret = pre + pos + "";
if("-".equals(code)) ret = pre - pos + "";
return calculate(str.replaceFirst(m.group(0).replaceFirst("\\+", "\\\\+"), ret));
}
}

return str;
}
doctormoney 2007-11-30
  • 打赏
  • 举报
回复
自己去写方法去吧,写一个计算器的程序就可以了。偶以前用c++写过,算法比较复杂,代码找不到了。
wjc214 2007-11-30
  • 打赏
  • 举报
回复
搞不懂
ChDw 2007-11-30
  • 打赏
  • 举报
回复
简单的就使用Antlr或者JavaCC,而且可以方便扩展。它们都有带表达式计算的Sample

62,623

社区成员

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

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