Java中,输入一个数学表达式,如:1+2,然后输出计算后的结果:1+2=3。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中,输入一个数学表达式,如:1+2,然后输出计算后的结果:1+2=3。相关的知识,希望对你有一定的参考价值。

Java中,输入一个数学表达式,如:1+2,然后输出计算后的结果:1+2=3。这里表达式只计算一次即可,可以使用加减乘除任意一个,可以进行小数运算。


这样应该就可以了

参考技术A //算式
public static void test32() throws Exception
    System.out.println("请输入算式:");
    Scanner scanner = new Scanner(System.in);
    String str = scanner.next("-?\\\\d*\\\\.?\\\\d+[+-/*]-?\\\\d*\\\\.?\\\\d+");
    String[] xyStr = str.split("[+-/*]");
    float x = Float.parseFloat(xyStr[0]);
    float y = Float.parseFloat(xyStr[1]);
    float r = 0;
    char opt = '+';
    if(str.contains("+"))
        opt = '+';
        r = x + y;
    else if(str.contains("-"))
        opt = '-';
        r = x - y;
    else if(str.contains("*"))
        opt = '*';
        r = x * y;
    else if(str.contains("/"))
        opt = '/';
        r = x / y;
    
    System.out.println(x+""+opt+y+"="+r);

本回答被提问者和网友采纳
参考技术B import java.util.Scanner;

public class test1
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数学表达式,如'1+1'、'1-1'、'1*1'、'1/1'");
String str = sc.next();
if(str.contains("+"))
String[] num = str.split("+");
double num1 = Double.parseDouble(num[0]);
double num2 = Double.parseDouble(num[1]);
System.out.println("运算结果是:"+num1+"+"+num2+"="+(num1+num2));
else if(str.contains("-"))
String[] num = str.split("-");
double num1 = Double.parseDouble(num[0]);
double num2 = Double.parseDouble(num[1]);
System.out.println("运算结果是:"+num1+"-"+num2+"="+(num1-num2));
else if(str.contains("*"))
String[] num = str.split("\\*");
double num1 = Double.parseDouble(num[0]);
double num2 = Double.parseDouble(num[1]);
System.out.println("运算结果是:"+num1+"*"+num2+"="+(num1*num2));
else
String[] num = str.split("/");
double num1 = Double.parseDouble(num[0]);
double num2 = Double.parseDouble(num[1]);
System.out.println("运算结果是:"+num1+"/"+num2+"="+(num1/num2));

参考技术C import java.util.Scanner;

public class Test1 

    public static void main(String[] args) 
        //读取控制台输入数据
        Scanner sc = new Scanner(System.in); 
        String readLine = sc.nextLine();
        //定义字符串组进行运算
        String[] str;
        //判断输入的是什么关系
        if(readLine.contains("+"))
             str = readLine.split("\\\\+");
             System.out.println(str[0]+"+"+str[2]+"="+String.valueOf(Long.parseLong(str[0])+Long.parseLong(str[1])));
        ;
        if(readLine.contains("-"))
             str = readLine.split("\\\\-");
             System.out.println(str[0]+"-"+str[2]+"="+ String.valueOf(Long.parseLong(str[0])-Long.parseLong(str[1])));
        ;
        if(readLine.contains("*"))
            str = readLine.split("\\\\*");
             str = readLine.split(str[0]+"*"+str[2]+"="+ String.valueOf(Long.parseLong(str[0])*Long.parseLong(str[1])));
        ;
        if(readLine.contains("÷"))
             str = readLine.split("\\\\÷");
             str = readLine.split(str[0]+"÷"+str[2]+"="+ String.valueOf(Long.parseLong(str[0])/Long.parseLong(str[1])));
        ;
        
    

JAVA计算数学表达式的程序

功能要求:
(1) 由用户输入一个简单的四则运算表达式,求出其计算结果后显示。
(2)允许在表达式中出现常用的数学函数,如绝对值、取整、三角函数、倒数、平方根、平方、立方等。
哎,老师让我们自己实现。

清单 1. Function、Operator 和 Variable 类的定义
public class Function

public String function;
public int number_of_arguments;
public Function( String function, int number_of_arguments )

this.function=function;
this.number_of_arguments=number_of_arguments;

public String toString()

return function;


public class Operator

public String operator;
public byte priority;
public Operator( String operator, byte priority )

this.operator=operator;
this.priority=priority;

public String toString()

return operator;


public class Variable

public String variable;
public double value;
public Variable( String variable, double value )

this.variable=variable;
this.value=value;

public String toString()

return variable;



Token 类如清单 2 所示。

清单 2. Token 类
public class Token

public Object token;
public char mark;
public int position;
public int length;
public Token ( Object token, char mark, int position, int length )

this.token=token;
this.mark=mark;
this.position=position;
this.length=length;

public String toString()

return token.toString()+" ; "+mark+" ; "+position+" ; "+length+"
";



清单 3. 三种括号
import java.util.Stack;
public class Parentheses_check

public static boolean is_open_parenthesis( char c )

if ( c=='(' || c=='[' || c=='' )
return true;
else
return false;

public static boolean is_closed_parenthesis( char c )

if ( c==')' || c==']' || c=='' )
return true;
else
return false;

private static boolean parentheses_match( char open, char closed )

if ( open=='(' && closed==')' )
return true;
else if ( open=='[' && closed==']' )
return true;
else if ( open=='' && closed=='' )
return true;
else
return false;

public static boolean parentheses_valid( String exp )

Stack s = new Stack();
int i;
char current_char;
Character c;
char c1;
boolean ret=true;
for ( i=0; i < exp.length(); i++ )

current_char=exp.charAt( i );
if ( is_open_parenthesis( current_char ) )

c=new Character( current_char );
s.push( c );

else if ( is_closed_parenthesis( current_char ) )

if ( s.isEmpty() )

ret=false;
break;

else

c=(Character)s.pop();
c1=c.charValue();
if ( !parentheses_match( c1, current_char ) )

ret=false;
break;




if ( !s.isEmpty() )
ret=false;
return ret;


清单 4. 正确的表达式开头的检查
private static boolean begin_check( Vector tokens, Range r, StringBuffer err )

char mark;
Token t;
t=(Token)tokens.elementAt( 0 );
mark=t.mark;
if ( mark=='P' )
err.append( Messages.begin_operator );
else if ( mark==')' )
err.append( Messages.begin_parenthesis );
else if ( mark=='Z' )
err.append ( Messages.begin_comma );
else
return true;
r.start=0;
r.end=t.length;
return false;

清单 5. 找出第一个闭括号
public static int pos_first_closed_parenthesis( Vector tokens )

Token t;
for ( int i=0; i<tokens.size(); i++ )

t=(Token)tokens.elementAt( i );
if ( t.mark==')' )
return i;

return 0;

清单 6. 找出匹配的开括号
public static int pos_open_parenthesis( Vector tokens, int closed_parenthesis )

int i;
Token t;
i=closed_parenthesis-2;
while ( i>=0 )

t=(Token)tokens.elementAt( i );
if ( t.mark=='(' )

return i;

i--;

return 0;


清单 7. 找出优先级最高的操作符
public static int pos_operator( Vector tokens, Range r )

byte max_priority=Byte.MAX_VALUE;
int max_pos=0;
byte priority;
String operator;
Token t;
for ( int i=r.start+2; i<=r.end-2; i++ )

t=(Token)tokens.elementAt( i );
if ( t.mark!='P' )
continue;
priority=((Operator)t.token).priority;
operator=((Operator)t.token).operator;
if ( priority < max_priority || ( operator.equals("^") ||
operator.equals("**") ) && priority == max_priority )

max_priority=priority;
max_pos=i;


return max_pos;

清单 8. 检查是否还有其它操作符
...
int poz_max_op=pos_operator( tokens, range );
// if there are no operators
if ( poz_max_op==0 )

if ( no_more_parentheses )

return false;

else

double result;
result=function_result( tokens, range.start-1 );
function_tokens_removal( tokens, range.start-1 );
t = new Token ( new Double(result), 'D', 0, 0 );
tokens.setElementAt( t, range.start-1 );
parentheses_removal( tokens, range.start-1 );
return true;


...

清单 9. 获取操作数并执行运算...
double operand1, operand2;
// first operand is before...
t=(Token)tokens.elementAt( poz_max_op-1 );
operand1=operand_value( t );
// ...and second operand is after operator
t=(Token)tokens.elementAt( poz_max_op+1 );
operand2=operand_value( t );
// operator
t=(Token)tokens.elementAt( poz_max_op );
String op=((Operator)t.token).operator;
double result=operation_result( operand1, operand2, op );
tokens.removeElementAt( poz_max_op+1 );
tokens.removeElementAt( poz_max_op );
t = new Token ( new Double(result), 'D', 0, 0 );
tokens.setElementAt( t, poz_max_op-1 );
parentheses_removal( tokens, poz_max_op-1 );
...
清单 10. 获取操作数
public static double operand_value( Token t )

if ( t.mark=='V' )
return ((Variable)t.token).value;
else if ( t.mark=='D' )
return ((Double)t.token).doubleValue();
else if ( t.mark=='H' )
return base_convert( ((String)t.token).substring(2), 16 );
else if ( t.mark=='O' )
return base_convert( ((String)t.token).substring(2), 8 );
else if ( t.mark=='B' )
return base_convert( ((String)t.token).substring(2), 2 );

清单 11. 将数转化为十进制数
public static long base_convert( String s, int base )

long r=0;
int i, j;
for ( i=s.length()-1, j=0; i>=0; i--, j++ )
r=r+digit_weight( s.charAt( i ) )*(long)Math.pow( base, j );
return r;

public static int digit_weight( char c )

if ( Character.isDigit( c ) )
return c-48;
else if ( 'A'<=c && c<='f' )
return c-55;
else if ( 'a'<=c && c<='f' )
return c-87;
return -1;

清单 13. 除去冗余括号
private static void parentheses_removal( Vector tokens, int pos )

if (
pos>1 &&
amp;&&
amp;
((Token)tokens.elementAt( poz-2 )).mark!='F' &&
amp;&&
amp;
((Token)tokens.elementAt( poz-1 )).mark=='(' &&
amp;&&
amp;
((Token)tokens.elementAt( poz+1 )).mark==')'
||
pos==1 &&
amp;&&
amp;
((Token)tokens.elementAt( 0 )).mark=='(' &&
amp;&&
amp;
((Token)tokens.elementAt( 2 )).mark==')'
)

tokens.removeElementAt( poz+1 );
tokens.removeElementAt( poz-1 );

return;


清单 14. 结合符号并显示结果
public static String token_join( Vector tokens )

String result=new String();
Token t;
for ( int i=0; i < tokens.size(); i++ )

t=(Token)tokens.elementAt( i );
if ( t.mark=='D' )

double n=((Double)t.token).doubleValue();
result=result + formated_number( n );

else
result=result + t.token;
if ( result.endsWith( ".0" ) )
result=result.substring( 0, result.length()-2 );
result=result + " ";

return result;

结论

本文分析了一个 applet ,它能一步一步的对算术表达式求值。同时还按顺序回顾了最有意思的代码片段,并论述了两种不同的表达式求值方法。

下一版 W3Eval 有望在各方面得到增强,包括有能力添加用户定义的功能;支持分数、复数和矩阵;改良的图形用户界面(GUI);大小和速度优化以及安全性方面的增强。我鼓励您提供您自己对于增强方面的设想。

我希望您会发现 W3Eval 是个对表达式求值有益的在线工具,它在某种程度上比经典的方法更简单自然。我还期待这里谈到的代码和算法使您明白 Java 语言有助于处理数学问题。

!强烈要求加分!
参考技术A 这个··貌似可以直接调用 java的数学模型库啊

jdk1.5模型库很全面了··自己调用看看吧

只要开头编辑一个任意格 就好了·本回答被提问者采纳
参考技术B

以上是关于Java中,输入一个数学表达式,如:1+2,然后输出计算后的结果:1+2=3。的主要内容,如果未能解决你的问题,请参考以下文章

JAVA计算数学表达式的程序

vs2020怎么输数据

如何在excel 图表中坐标轴上输入数学公式啊?

如何用matlab求输入2组数据的相对误差

C语言:从键盘输入一个人简单的数学表达式,计算并显示该表达式的值

在linux中write和writel的区别