Java输入一个表达式 怎么让它直接输出结果 如 输入:1+2*3+3/4+2*3-5 然后可以直接输出结果 20

运算符要有优先级的二楼在说屁话没看到说的是输入一个表达式啊... 运算符要有优先级的
二楼在说屁话 没看到说的是输入一个表达式啊
展开
 我来答
刹那轻狂
推荐于2018-04-20 · TA获得超过273个赞
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:178万
展开全部
给你说下思路 你输入的表达式是一个 字符串~ “1+2*3+3/4+2*3-5”
用java的正则表达式解析该表达式 把数字和运算符依次读取出来 然后转换为java表达式 1+2*3+3/4+2*3-5 直接输出就可以了~
百度网友312835d2c
2010-03-18 · TA获得超过155个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:135万
展开全部
用堆栈类,括号匹配,利用优先级的原理分步计算,得出结果。

比较麻烦,好好享受动脑子的过程吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-03-18
展开全部
1.最简单的:system.out.println(””+ (1+2*3+3/4+2*3-5));
2.重写toString()方法,把这个值做为String 进行返回
public class Test {

public static void main(String[] args) {
System.out.println(" "+(1+2*3+3/4+2*3-5));
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狼破浪
2010-03-18 · TA获得超过470个赞
知道小有建树答主
回答量:324
采纳率:100%
帮助的人:171万
展开全部
public class Core {

public double calculate(String expression){
expression = expression.trim();
if(expression.contains("(")){
int fIndex = expression.indexOf('(');
int lIndex = expression.lastIndexOf(')');
String sub = expression.substring(fIndex+1, lIndex);
expression = expression.substring(0, fIndex) + String.valueOf(calculate(sub)) + expression.substring(lIndex+1);
return calculate(expression);
}else if(expression.contains("+") || (expression.contains("-"))){
if(expression.startsWith("-")){
//if expression is only a negative number
if(!expression.substring(1).contains("+") && !expression.substring(1).contains("-")){
return -1*(calculate(expression.substring(1)));
}else{
for(int i=1; i<expression.length(); i++){
if(expression.charAt(i) == '+'){
return -1*calculate(expression.substring(1, i))+calculate(expression.substring(i+1));
}else if(expression.charAt(i) == '-'){
return -1*calculate(expression.substring(1, i))-calculate(expression.substring(i+1));
}
}
}
}else{
for(int i=0; i<expression.length(); i++){
if(expression.charAt(i) == '+'){
return calculate(expression.substring(0, i))+calculate(expression.substring(i+1));
}else if(expression.charAt(i) == '-'){
return calculate(expression.substring(0, i))-calculate(expression.substring(i+1));
}
}
}
}else if(expression.contains("*") || expression.contains("/")){
for(int i=0; i<expression.length(); i++){
if(expression.charAt(i) == '*'){
return calculate(expression.substring(0, i))*calculate(expression.substring(i+1));
}else if(expression.charAt(i) == '/'){
return calculate(expression.substring(0, i))/calculate(expression.substring(i+1));
}
}
}else{
return Double.parseDouble(expression);
}
System.out.println("Incorrect expression");
return 0.0;
}

public static void main(String[] args){
Core c = new Core();
System.out.println(c.calculate(
"1+(2+3*(-4+5)+1)*4"
));
String a = "abcdefghijklmn";
System.out.println("a = "+a);
a.replaceAll("abc", "aaa");
System.out.println("a = "+a);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hight1234
2010-03-22 · TA获得超过161个赞
知道答主
回答量:277
采纳率:0%
帮助的人:178万
展开全部
算术表达式 求值的经典方法 就是把 中缀表达式转化成 后缀表达式,
算法如下:
1,初始化一个空堆栈,将结果字符串变量置空。
2,从左到右读入中缀表达式,每次一个字符。
3,如果字符是操作数,将它添加到结果字符串。
4,如果字符是个操作符,弹出(pop)操作符,直至遇见开括号(opening parenthesis)、优先级较低的操作符或者同一优先级的右结合符号。把这个操作符压入(push)堆栈。
5,如果字符是个开括号,把它压入堆栈。
6,如果字符是个闭括号(closing parenthesis),在遇见开括号前,弹出所有操作符,然后把它们添加到结果字符串。
7,如果到达输入字符串的末尾,弹出所有操作符并添加到结果字符串。
这个是 Donald Knuth 于 1962年 描述的.
比如 2+3*4+(2+3)*5 转换成后缀表达式为: 234*+23+5*+
对后缀表达式求值 就不难了,
从左到右读入后缀表达式
如果字符是一个操作数,把它压入堆栈。
如果字符是个操作符,弹出两个操作数,执行恰当操作,然后把结果压入堆栈
到后缀表达式末尾,从堆栈中弹出结果。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式