龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

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

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
import Java.util.Date; public class testcalc2 { String a; int len_of_str; int err; //err 用于发现哪个字符是出错字符就是第一个出错字符串的下标,初始值为-1,表示无错 int index; public testcalc2(String str)

  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;
   }
  
精彩图集

赞助商链接