Java输入一个表达式 怎么让它直接输出结果 如 输入:1+2*3+3/4+2*3-5 然后可以直接输出结果 20
6个回答
展开全部
用堆栈类,括号匹配,利用优先级的原理分步计算,得出结果。
比较麻烦,好好享受动脑子的过程吧。
比较麻烦,好好享受动脑子的过程吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
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));
}
}
2.重写toString()方法,把这个值做为String 进行返回
public class Test {
public static void main(String[] args) {
System.out.println(" "+(1+2*3+3/4+2*3-5));
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
}
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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
算术表达式 求值的经典方法 就是把 中缀表达式转化成 后缀表达式,
算法如下:
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*+
对后缀表达式求值 就不难了,
从左到右读入后缀表达式
如果字符是一个操作数,把它压入堆栈。
如果字符是个操作符,弹出两个操作数,执行恰当操作,然后把结果压入堆栈
到后缀表达式末尾,从堆栈中弹出结果。
算法如下:
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*+
对后缀表达式求值 就不难了,
从左到右读入后缀表达式
如果字符是一个操作数,把它压入堆栈。
如果字符是个操作符,弹出两个操作数,执行恰当操作,然后把结果压入堆栈
到后缀表达式末尾,从堆栈中弹出结果。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询