保存写了一天代码(注意,程序有一些问题)

    技术2022-05-11  52

    public class TestString {  public static void main(String[] args)   {   String ts = "200-2d+3d6-d3/2+5+3dd6*3d";   //int intaddtmp = 0;   //StringBuffer straddtmp = new StringBuffer();   String[] tadd = ts.split("//+");    for (int i=0;i<tadd.length;i++)    {     String[] tdec = tadd[i].split("-");      for (int i=0;i<tdec.length;i++)      {       String[] tmul = tdec[i].split("//*");        for (int i=0;i<tmul.length;i++)        {         String[] tdiv = tmul[i].split("/");         double[] tdivnum = new double[tdiv.length];          for (int i=0;i<tdiv.length;i++)          {           String[] tdice = tdiv[i].split("d");           int intdiceaddtmp=0;            if (tdice[0].eauals(tdiv[i])             continue;            if (tdice.length > 2)             return "骰子表达式非法";            if (tdice[0].equals(""))             tdice[0]="1";                       if (tdice.length = 1 )            {                           for (int idice=0;idice<Integer.parseInt(tdice[0]);idice++)             {              int tmp = countDice(20);              intdiceaddtmp+=tmp;              intaddtmp.append("+").append(tmp);             }            }            else            {             for (int idice=0;idice<Integer.parseInt(tdice[0]);idice++)             {              int tmp = countDice(strChangint(tdice[1]));              intdiceaddtmp+=tmp;              intaddtmp.append("+").append(tmp);             }            }           if (tdiv[idiv].eauals(tmul[imul]))            continue;                                                                      //问题           if (tdiv[idiv].equals(""))            retrun "第一位就是算术操作符或者算术操作符重复";           tdivnum[idiv] = Double.parseDouble(tdiv[idiv]);           if (tdivnum[idiv]==0)            retrun "不支持除法运算中含有0";          }          double tdivtmp = tdivnum[0]          for (idivnum=1;idivnum<tdivnum.length;idivnum++)          {           tdivtmp = tdivtmp/tdivnum[idivnum];          }          tmul[imul]=tdivtmp.toString();          if (tmul[imul].eauals(tsec[idec]))           continue;          if (tmul[imul].equals(""))           retrun "第一位就是算术操作符或者算术操作符重复";          tmulnum[imul] = Double.parseDouble(tmul[imul]);          double tdivtmp = tdivnum[0]          for (idivnum=1;idivnum<tdivnum.length;idivnum++)          {           tdivtmp = tdivtmp/tdivnum[idivnum];          }          tmul[imul]=tdivtmp.toString();                             }                                }     /*     if (tt[i].equals(""))      tt[i] = "没有内容的字符串";     System.out.println("tt["+i+"]: "+tt[i]);   */    }      }}

    =========================

    今天做了一些改动, 比较好的一个版本

    /** *  */

    /** * @author rei * */public class TestString {

     /**  * @param args  */ public static void main(String[] args) {  // TODO 自动生成方法存根  String cm = "3-12+10*6/0+5+";  //String cm = "3*2d10/2";   try   {    System.out.println(countExp(cm));   }   catch(NumberFormatException e)   {    System.out.println("存在非法字符");   }

     }  public static String countExp(String countmessage) throws NumberFormatException {  String returncm = "";  String[] tadd = countmessage.split("//+");  double[] taddnum = new double[tadd.length];  double naddtmp = 0;   for (int iadd=0;iadd<tadd.length;iadd++)   {    String[] tdec = tadd[iadd].split("-");    double[] tdecnum = new double[tdec.length];    double ndectmp = 0;     for (int idec=0;idec<tdec.length;idec++)     {      String[] tmul = tdec[idec].split("//*");      double[] tmulnum = new double[tmul.length];      double nmultmp = 0;       for (int imul=0;imul<tmul.length;imul++)       {        //System.out.println(tmul[imul]);        String[] tdiv = tmul[imul].split("/");        double[] tdivnum = new double[tdiv.length];        double ndivtmp = 0;         for (int idiv=0;idiv<tdiv.length;idiv++)         {          if (Double.parseDouble(tdiv[idiv])==0)           return "不支持除法表达式中含有0";          if (tdiv[idiv].equalsIgnoreCase("d"))           tdiv[idiv] = "1d20";          String[] tdice = tdiv[idiv].split("d");          int intdiceaddtmp=0;           if (tdice[0].equals(tdiv[idiv]))           {             intdiceaddtmp=Integer.parseInt(tdiv[idiv]);            //System.out.println(intdiceaddtmp);           }           else           {            if (tdice.length > 2)             return "骰子表达式非法";            if (tdice[0].equals(""))             tdice[0]="1";                      if (tdice.length == 1 )            {                          for (int idice=0;idice<Integer.parseInt(tdice[0]);idice++)             {              int tmp = countDice(20);                            intdiceaddtmp+=tmp;              //intaddtmp.append("+").append(tmp);             }            }            else            {             if (!checkDice(Integer.parseInt(tdice[1])))             {              return "这个骰子面数有点奇怪...";             }             for (int idice=0;idice<Integer.parseInt(tdice[0]);idice++)             {              int tmp = countDice(Integer.parseInt(tdice[1]));                      intdiceaddtmp+=tmp;              //intaddtmp.append("+").append(tmp);             }            }                                               }           tdiv[idiv] = Integer.toString(intdiceaddtmp);            tdivnum[idiv] = Double.parseDouble(tdiv[idiv]);                         }       if (tdiv[0].equals(tmul[imul]))       {                tmulnum[imul] = Double.parseDouble(tmul[imul]);//continue       }       else       {                  ndivtmp = tdivnum[0];                for (int idivnum=1;idivnum<tdivnum.length;idivnum++)        {         ndivtmp = ndivtmp/tdivnum[idivnum];        }

             tmulnum[imul] = ndivtmp;       }             tmul[imul] = Double.toString(tmulnum[imul]);                  }     if (tmul[0].equals(tdec[idec]))     {      tdecnum[idec] = Double.parseDouble(tdec[idec]);//continue           }     else     {              nmultmp = tmulnum[0];            for (int imulnum=1;imulnum<tmulnum.length;imulnum++)      {       nmultmp = nmultmp*tmulnum[imulnum];      }      tdecnum[idec] = nmultmp;      //System.out.println(nmultmp);       }         tdec[idec] = Double.toString(tdecnum[idec]);    //System.out.println(tdec[idec]);                 }   if (tdec[0].equals(tadd[iadd]))   {    taddnum[iadd] = Double.parseDouble(tadd[iadd]);//continue   }   else   {           ndectmp = tdecnum[0];           for (int idecnum=1;idecnum<tdecnum.length;idecnum++)     {      ndectmp = ndectmp-tdecnum[idecnum];     }     taddnum[iadd] = ndectmp;

             }   tadd[iadd] = Double.toString(taddnum[iadd]);             }  if (tadd[0].equals(countmessage))  {   returncm = countmessage + "=" + countmessage;  }  else  {   naddtmp = taddnum[0];     for (int iaddnum=1;iaddnum<taddnum.length;iaddnum++)  {   //System.out.println(naddtmp+":"+iaddnum+":"+taddnum.length);   naddtmp = naddtmp+taddnum[iaddnum];   //System.out.println("+:"+naddtmp+":"+taddnum.length);   }      returncm = countmessage + "=" + Double.toString(naddtmp);    }  return returncm; }

     private static boolean checkDice(int i) {  // TODO 自动生成方法存根  switch(i)  {  case 2:   return true;  case 3:   return true;  case 4:   return true;  case 6:   return true;  case 8:   return true;  case 10:   return true;  case 12:   return true;  case 20:   return true;  case 100:   return true;  default:  return false;  } }

     private static int countDice(int i) {  return (int)(Math.random()*i)+1; } }


    最新回复(0)