一个简单的表达式求值类,java
2008-01-05 19:19:28 来源:WEB开发网核心提示:import java.util.Date;public class testcalc2{ String a; int len_of_str; int err; //err 用于发现哪个字符是出错字符就是第一个出错字符串的下标,初始值为-1,一个简单的表达式求值类,java,表示无错 int ind
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;
}
更多精彩
赞助商链接