package learn;
//本程序只能计算正整数范围内的加减乘除运算。
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LX2x
{
//优先级数组,precede[i][j],表示第i个操作符与第j个操作符的优先级,0,1,2,3,4,5,6分别是'+', '-', '*', '/', '(', ')', '#'
//0表示,第i个操作符优先级小于第j个操作符。1表示大于,2表示相等,3是表示不可能的。
//+ , - , * , / , ( , ) , #
int precede[][]={{1 , 1 , 0 , 0 , 0 , 1 , 1}, // +
{1 , 1 , 0 , 0 , 0 , 1 , 1}, // -
{1 , 1 , 1 , 1 , 0 , 1 , 1}, // *
{1 , 1 , 1 , 1 , 0 , 1 , 1}, // /
{0 , 0 , 0 , 0 , 0 , 2 , 3}, // (
{1 , 1 , 1 , 1 , 3 , 1 , 1}, // )
{0 , 0 , 0 , 0 , 0 , 3 , 2}};// #
char[] operate={'+', '-', '*', '/', '(', ')', '#'};
String exp=null;
public LX2x(String exp)
{
this.exp=exp;
}
void getValueInt()
{ //从0开始扫描表达式字符串。
Stackoptr=new Stack();
Stackopnd=new Stack();
String expression=exp+"#"; //给表达式加一个运算符,且是一个结束符
optr.push(6); //先把'#'操作符对应的序号入栈。
int index=0;
char c=0;
String regex="([-]?[0-9]+(\\.([0-9]+)?)?)";
Pattern numberPattern=http://www.doczj.com/doc/887bb03b0242a8956aece41c.htmlpile(regex);
Matcher numberMatcher=numberPattern.matcher(expression);
while(index{
if(numberMatcher.find(index))
{