一个简单的表达式求值类,java

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

import Java.util.Date;

public class testcalc2

{

String a;

int len_of_str;

int err; //err 用于发现哪个字符是出错字符就是第一个出错字符串的下标,初始值为-1,表示无错

int index;

public testcalc2(String str)

{

a = str + "+";

len_of_str = a.length();

err = -1;

index = 0;

System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%% " + a + len_of_str);

}

public double getnextnum()

{

int preindex = index, countofdot = 0;

if(a.charAt(index) == '-')

index++;

if(!Character.isDigit(a.charAt(index)))

{

err = index;

return 0;

}

while((index < len_of_str) &&

(Character.isDigit(a.charAt(index)) a.charAt(index) == '.'))

{

if(a.charAt(index) == '.')

{

countofdot++;

}

index++;

if(countofdot == 2)

{

err = index;

return 0;

}

}

return Double.valueOf(a.substring(preindex, index)).doubleValue();

}

public char getnextop()

{

char ch = a.charAt(index);

if((ch != '+') && (ch != '-') && (ch != '*') && (ch != '/'))

{

err = index;

ch = ' ';

return ch;

}

index++;

return ch;

}

public double calcuvalue()

{

long start = System.currentTimeMillis();

Date d = new Date();

long now = d.getTime(), dif;

char ch;

boolean minusflag = false, multiflag = false, dividflag = false;

double total = 0, next = 0, num = 0; //next used to be * or /

while(index < len_of_str)

{

num = getnextnum();

if(err != -1)

{

System.out.println("err!?! try to getnextnum but " +

" the char at index " + err + " is wrong ");

return 0;

}

System.out.println("index after " + index);

ch = getnextop();

if(err != -1)

{

System.out.println("err!?! try to getnextop but " +

" the char at index " + err + " is wrong ");

return 0;

}

System.out.println("index after " + index);

switch (ch)

{

case '+':

if(multiflag)

{

next = next * num;

}

else if(dividflag)

{

next = next / num;

}

else

{

next = num;

}

if(minusflag)

{

next = -next;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航