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

运算符要有优先级的
二楼在说屁话 没看到说的是输入一个表达式啊

给你说下思路 你输入的表达式是一个 字符串~ “1+2*3+3/4+2*3-5”
用java的正则表达式解析该表达式 把数字和运算符依次读取出来 然后转换为java表达式 1+2*3+3/4+2*3-5 直接输出就可以了~
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-18
用堆栈类,括号匹配,利用优先级的原理分步计算,得出结果。

比较麻烦,好好享受动脑子的过程吧。
第2个回答  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));
}
}
第3个回答  2010-03-18
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);
}
}
第4个回答  2010-03-22
算术表达式 求值的经典方法 就是把 中缀表达式转化成 后缀表达式,
算法如下:
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+3\/4+2*3-5 然后可以直接输出结 ...
用java的正则表达式解析该表达式 把数字和运算符依次读取出来 然后转换为java表达式 1+2*3+3\/4+2*3-5 直接输出就可以了~

java输入类似于1+2+3+4这样的自定义四元算式,如何把各个字符提出来然后...
1,初始化一个空堆栈,将结果字符串变量置空。2,从左到右读入中缀表达式,每次一个字符。3,如果字符是操作数,将它添加到结果字符串。4,如果字符是个操作符,弹出(pop)操作符,直至遇见开括号(opening parenthesis)、优先级较低的操作符或者同一优先级的右结合符号。把这个操作符压入(push)堆栈...

java语言程式设计 输入一个正整数N,输出表达式1+1\/2+1\/3+.+1\/N的值
java语言程式设计 输入一个正整数N,输出表达式1+1\/2+1\/3+...+1\/N的值 package test;import java.util.Scanner;public class Express { public static void main(String[] args) { System.out.println("请输入n的值"); Scanner scan=new Scanner(System.in); int n=scan.nextIn...

Java怎么实现输入一个string表达式然后输出计算的结果
String sub=s.substring(i+1,pos);\/\/括号中的表达式 porder="";postorder(create(sub));\/\/得到后缀表达式 int sum=calc(porder);\/\/计算后缀表达式的值,替换原来括号中的表达式 s=s.substring(0,i)+String.valueOf(sum)+s.substring(pos+1);len=s.length();\/\/重新计算s的长度 } \/\/从后往...

计算器如何实现1+2*3只扫描一次?
点个思路,输入就是一个个字符拼成的字符串,所以你输入的1+2*3他也是个字符串,那么字符串你就可以查询每个字符,找到关键字符+-*\/。找到这些符号后,然后你在做判断这个运算符的的优先级,碰到*或\/号就直接将符号两边的数据做运算,碰到+或-就再判断下个运算符是否是+或-,如果是则可以进行上1...

用while循环语句编程输出九九乘法口诀表
方法一:1 i = 1 2 while i < 10:3 k = 1 4 while k <= i:5 print('%d*%d=%2d '% (i,k,i*k),end='') #end=‘’ 表示不换行(系统默认输出完毕换行)6 k += 1 7 print()8 i += 1 输出结果 9 1*1= 1 10 2*1= 2 2*2= 4...

输入运算公式 得到结果 java
通过栈实现,先用栈将中缀表达式转化为后缀表达式,然后再用栈计算后缀表达式的值的 package com.saturday;import java.text.NumberFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Stack;import java.util.regex.Matcher;import ...

中缀表达式转换为后缀表达式(Java)
- 遇到),从栈中弹出:-(输出),弹出:((输出)经过处理后,得到的后缀表达式为:“123+4 × +5 –”。为了完成这个转换过程,您可以使用Java编程语言编写一个简单的程序。程序中需要实现以下功能:读取输入的中缀表达式、维护一个操作符栈、处理操作数和操作符、以及将结果输出为后缀表达式。实现...

用python计算1\/2+2\/3+3\/5?
如果只计算这个表达式,那么直接用下面的语句就可以输出结果:print(1\/2+2\/3+3\/5);如果是计算这个数列的前n项目,那么这个数列的下一项和通项公式还需要先猜出来,我猜测3\/5的下一项是4\/8,通项公式第i项的分子为i、分母为上一项的分子与分母之和,那么代码为:n=int(input('n='))a=1b=...

java输入1个完全平方数,计算并输出其表达式.
import java.util.Scanner;public class Test {public static void main(String[] args) {System.out.println("请输入一个完全平方数");Scanner sc = new Scanner(System.in);int x = sc.nextInt();int j = (int) Math.sqrt(x);\/\/其实应先判断是否是一个完全平方数.如果是,才进行输出\/\/...

相似回答