java编程数学表达式的计算!

采用栈的形式存取数据,根据二叉树,进行数学运算。你要是学了数据结构就明白怎么做了……

Ⅱ JAVA表达式计算

1)3.5
2)12.5

望满意~

Ⅲ java三元表达式怎么算

举个简单例子吧抄。

int a=1;int b=2;int c= a>b?1:0,结果袭c 为0。a>b 为条件,后面当条件为true时返回":"前面的结果,反之返回":"后面的结果。

Ⅳ Java计算字符串中的数学表达式的值算法怎么写

代码网上很多,只说说算法吧
12+8/4-5+(3-4)

把这样的表达式拆成:(操作数)(操作符) 、
12+
8/
4-
5+(
3-
4)
(术语叫做逆波兰式)
默认的计算顺序是从左往右,记为left。另设从右往左,记为right
设计Element类,具有 操作数 operant, 操作符operator, 操作顺序 order三个属性
用两个先进后出的栈结构Stack<Element> a,b;
一开始所有的Element都在a中,逐个弹出计算合并值,
当遇到乘、除、括号时计算顺序改变成right,把当前结果放到b中暂存。
直到再次遇到加、减、)右括号时,意味计算顺序复位成left,先把b中的暂存结果全部合并后,再继续算a中的剩余数据
最后合并成一个结果值。

Ⅳ JAVA计算数学表达式的程序

清单 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 语言有助于处理数学问题。

!强烈要求加分!

Ⅵ Java计算表达式。

有个
bashell吧,可以
名字记不清了,回去给你找一下。

Ⅶ JAVA语言计算表达式的结果

没现成的程序,话说网络的积分没啥用,没人愿意为20分去给你写程序的。。
简单提示下吧
这个是
编译原理
的内容,两个简单的方法
1、
递推
下降分析器,就是LL分析
2、
算符
优先分析,就是LR分析的简化版
找代码的话,去看严蔚敏数据结构。。。上面有。。。是基于算符优先的,优先表都给出来了。。。
用LL的话,去找javacc吧,里面自带的例子就是你要的。。。

Ⅷ java问题,怎么将字符串型的数学表达式计算出结果

这涉及到一个技术:【表达式分析】

可以利用到栈数据结构来分析,也可以硬来,按人脑怎么算,你就怎么算。

如果你只是想解决这个问题,其中一个简单的思路是:

你要解决的问题实际是算出这样格式的字符串表达式的结果:
<number><op><number><op><number><op><number>...

<number>表示任意数.比如41,55,66234,-244

<op>表示任意运算符,比如+,-,*,/,%,^

把<op>按优先级排列。

先算完优先级高的,再算优先级低的。“5+2*3*1”的具体步骤是:

先算优先级高的2*3=6

用6替换掉2*3,

得到 "5+6*1"

再检测是否还有高优先级的*,有则
6*1=6,用"6"替换掉"6*1"

得到"5+6"

接着没有高优先级的运算符字符了,可以算低优先级字符
接着得到用"11"替换"5+6"。

如果你还需要其他更为精妙和复杂的方法,建议你分别搜索关键字:

“栈 表达式求值”
“编译原理 表达式求值”
“树 表达式求值”

因为表达式分析是一门复杂的技术,不仅仅是四则运算,还包括所有语言分析(包括伪自然语言分析)

Ⅸ 怎么在JAVA中运算表达式

Java表达式是变量、常量、运算符、方法调用的序列,它执行指定的计算并返内回某个确定的容值。

其中,运算符按操作数的数目:有一元运算符(++、--)、二元运算符(+、-、>等等)和三元运算符(?:),它们分别对应一到三个操作数。

表达式一般按运算符来分:

算术表达式(float x=8.3f、i++)、

关系表达式(3>7、3<7)、

布尔逻辑表达式((5>4)&&true、!false)、

位运算表达式(a=34^3)、

赋值表达式、

条件表达式(b=100>89?a=ture:a=false)

以及复合表达式。

还有一种叫“表达式语句”,就是在表达式后加上分号作为语句来使用。(int i=123;)

Ⅹ 计算表达式的值 java

应该是精度问题。所以结果始终是 0

应该是零点几几几

import java.util.Scanner;

/**
cn = [1 / (n+1)] * (2n)! / [(n!) * (n!)]
*/

public class BaiDuTest {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();

double val = 1;
double val2 = 1;
double cn = 1;
val = getFactorial(n);
val2 = getFactorial(2 * n);

cn = (1/(n + 1))*val2/(val*val) ;
System.out.println(n);
System.out.println(cn);
System.out.println(val);
System.out.println(val2);
}

public static double getFactorial(int n) {

double result = 1;

if(n == 1) {
return 1;
}
return result = n * getFactorial(n - 1);
}

}