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;      }      total = total + next;      minusflag = false;      multiflag = false;      dividflag = false;      break;     case '-':      if(multiflag)      {       next = next * num;      }      else if(dividflag)      {       next = next / num;      }      else      {       next = num;      }      if(minusflag)      {       next = -next;      }      total = total + next;      minusflag = true;      multiflag = false;      dividflag = false;      break;     case '*':      if(multiflag)      {       next = next * num;      }      else if(dividflag)      {       next = next / num;      }      else      {       next = num;      }      multiflag = true;      dividflag = false;      break; 
    case '/':      if(multiflag)      {       next = next * num;      }      else if(dividflag)      {       next = next / num;      }      else      {       next = num;      }      dividflag = true;      multiflag = false;      break;     default:         //impossible ,already has err     }    System.out.println("ch " + ch + " num " + num + " total " + total +         " next " + next + " -" + minusflag + " *" +         multiflag + " /" + dividflag);   }                       //while 
  return total; 
 }  
 
  |