zoukankan      html  css  js  c++  java
  • 更新-补四则运算(结对编程)

    结对编程(四则运算)
    结对伙伴:刘芳芳、于淼
    主要用java实现编码
    内容:给小学生出题的四则运算
    四种运算

    1-加法
    2-减法
    3-乘法
    4-除法
    0-退出
    四则运算PSP
    类别 开始时间 结束时间 间隔时间 累计净时间
    四则运算分析 7:30 8:00 0 30分
    编码 8:00 10:43 0 2小时43分
    总结 10:43 10:50 0 7分





    补充代码函数进度

    代码如下:
      1 package arrays.myArray;
      2 import java.util.Scanner;
      3 public class SortObjec {
      4 private static int intercePosition = 0; // 记录单个运算数据的长度
      5 private static int[] intercePositionIndex = null; // 记录“(”的下标
      6 private static int[] intercePositionEnd = null; // 记录“)”的下标
      7 public static void main(String[] args) {
      8         Scanner input = new Scanner(System.in);
      9         do 
     10         {
     11             System.out.println("请输入你要计算的字符串(注意:只能输入数字和加,减,乘除符号;输入完毕后,请直接回车):");
     12             String numberString = input.next().trim();
     13             // 判断输入的运算字符串是否符合规定
     14             if (ispassString(numberString) == false) 
     15             {
     16                 System.out.println("您输入的计算字符串有误,请正确输入!");
     17             } 
     18             else 
     19             {
     20                 // 计算结果返回
     21                 System.out.println(interceResult(numberString));
     22             }
     23         } 
     24         while (true);
     25      }
     26     
     27      // 判断是否有带括号的运算字符串存在
     28      private static String interceResult(String str) 
     29      {
     30          String result = str;
     31          char[] numberString = str.toCharArray(); // 1+2+(1*2+1-1*2+5)+2+(1+5+9+10-11)+1*5/2+3
     32          // 1+8-9+(1*8/2-5+(1+2+8))+4/5*8/3*2
     33          int IndexStart = 0; // 记录“(”的实际数量
     34          int EndStart = 0; // 记录“)”的实际数量
     35          for (int i = 0; i < numberString.length; i++) 
     36          {
     37              if ('(' == numberString[i]) 
     38              {
     39                  // 记录最后一个正括号的位置
     40                  IndexStart = i;
     41              }
     42              if (')' == numberString[i]) 
     43              {
     44                  // 记录反括号的最初始下标的位置
     45                  EndStart = i;
     46     
     47                  // 截取最里面一个括号里的运算字符串
     48                  result = result.substring(IndexStart + 1, EndStart);
     49     
     50                  // 截取括号的运算字符串进行运算,生成新的运算字符串
     51                  result = str.substring(0, IndexStart)
     52                 + interceptOperation(result, '*', '/')
     53                 + str.substring(EndStart + 1, str.length());
     54     
     55                  // 回调执行,其它小括号的运算字符串
     56                  return interceResult(result);
     57              }
     58              if (i == numberString.length - 1)
     59                  if (EndStart == 0)
     60                      break;
     61          }
     62          // 不存在括号了,再进行混合运算
     63          result = interceptOperation(str, '*', '/');
     64          return result;
     65      }
     66     
     67      // 不带括号的四则运算
     68      private static String interceptOperation(String operationNumber, char a,char b) 
     69      {
     70          String mess = operationNumber;
     71          char[] stringOperation = mess.toCharArray();
     72     
     73          // 循环遍历运算字符串,并做相应的运算
     74          for (int i = 0; i < stringOperation.length; i++) {
     75     
     76              // 判断运算符所在的索引
     77              if (stringOperation[i] == a || stringOperation[i] == b) {
     78                  if (i != 0) 
     79                  {
     80                      // 运算符前的第一个数
     81                      double num1 = interceptNumIndex(mess.substring(0, i));
     82          
     83                      // 记录第一个数据的长度
     84                      int frontPosition = intercePosition;
     85          
     86                      // 运算符前的第二个数
     87                      double num2 = interceptNumEnd(mess.substring(i + 1,
     88                              stringOperation.length));
     89     
     90                      // 记录第二个数据的长度
     91                      int backPosition = intercePosition;
     92          
     93                      // 算完乘除,将结果替换到原来运算的位置,得到新的运算字符串
     94                      String IndexMess = mess.substring(0, i - frontPosition + 1);
     95                      String IndexResult = "";
     96     
     97                      // 判断是否运算到最后的结果了
     98                      if (IndexMess.indexOf('+') == -1
     99                              && IndexMess.indexOf('*') == -1
    100                              && IndexMess.indexOf('/') == -1
    101                              && IndexMess.lastIndexOf('-') == -1)
    102                          IndexMess = "";
    103                      if (IndexMess != "")
    104                          IndexResult = IndexMess.lastIndexOf('-') == IndexMess
    105                          .length() - 1 ? IndexMess.substring(0, i
    106                                  - frontPosition) : IndexMess;
    107     
    108                          // 组装新的运算字符串
    109                          mess = IndexResult// mess.substring(0,i-frontPosition+1)
    110                                  + reslutString("" + stringOperation[i], num1, num2)
    111                                  + mess.substring(i + backPosition + 1);
    112                          // 0.111/1212/2/2/2/2/2/2/2
    113                          if (mess.lastIndexOf('-') == 0 && mess.indexOf('+') == -1
    114                                  && mess.indexOf('*') == -1
    115                                  && mess.indexOf('/') == -1) {
    116                              break;
    117                          }
    118                          // 回调,继续运算
    119                          return interceptOperation(mess, a, b);// 1+7-5+89/3+4-6*8/2+4-6
    120                  } 
    121                  else
    122                      continue;
    123              }
    124              if (i == stringOperation.length - 1) 
    125              {
    126                  // 递归出口,判断是否还有运算字符串在
    127                  if (mess.indexOf('+') != -1 || mess.indexOf('-') != -1)
    128                      return interceptOperation(mess, '+', '-');
    129                  break;
    130              }
    131          }
    132          return mess;
    133      }
    134 
    135  // 截取第二个数
    136      private static double interceptNumEnd(String str) 
    137      {
    138          double a = 0;
    139          int InrerceIndex = 0;
    140          char[] stringOperation = str.toCharArray();
    141          boolean ispas = false; // 记录是否为负数
    142          for (int i = 0; i < stringOperation.length; i++) 
    143          {
    144              switch (stringOperation[i]) {
    145              case '*':
    146              case '/':
    147              case '+':
    148              case '-':
    149                  InrerceIndex = i;
    150                  if (i != 0) // 判断该数是否为负数
    151                      ispas = true;
    152                  break;
    153              default:
    154                  break;
    155              }
    156              if (ispas)
    157                  break;
    158          }
    159          // 判断此数据是否在运算字符串的最后一位
    160          if (InrerceIndex == 0) {
    161              a = Double.parseDouble(str);
    162              intercePosition = str.length();
    163              if (ispas)
    164                  intercePosition++;
    165     
    166          } 
    167          else 
    168          {
    169              a = Double.parseDouble(str.substring(0, InrerceIndex));
    170              // 记录数据的真实长度
    171              intercePosition = str.substring(0, InrerceIndex).length();
    172          }
    173          return a;
    174          }
    175 
    176      // 截取第一个数
    177      private static double interceptNumIndex(String str) 
    178      {
    179          double a = 0; // 记录数据
    180          int InrerceIndex = 0; // 记录运算符的位置
    181          boolean temp = false; // 记录数据前运算符的状态
    182          char[] stringOperation = str.toCharArray();
    183          for (int i = stringOperation.length - 1; i >= 0; i--) 
    184          {
    185              switch (stringOperation[i]) {
    186              case '*':
    187              case '/':
    188 
    189              case '+':
    190              case '-':
    191                  InrerceIndex = i;
    192                  temp = true;
    193                  break;
    194              default:
    195                  break;
    196              }
    197              if (temp)
    198                  break;
    199          }
    200      // 判断此数据是否在运算字符串的第一位
    201      if (InrerceIndex == 0) {
    202          a = Double.parseDouble(str);
    203          intercePosition = str.length();
    204          // if(temp)
    205          // intercePosition++;
    206      } 
    207      else 
    208      {
    209          a = Double.parseDouble(str.substring(InrerceIndex, str.length()));
    210          // 记录数据的真实长度
    211          intercePosition = str.substring(InrerceIndex, str.length())
    212                  .length();
    213      }
    214      return a;
    215      }
    216 
    217  // 计算结果
    218      private static double reslutString(String operation, double num1,double num2) 
    219      {
    220          double sumResult = 0;
    221          if (operation.equals("*"))
    222              sumResult = num1 * num2;
    223          if (operation.equals("-"))
    224              sumResult = num1 - num2;
    225          if (operation.equals("/"))
    226              sumResult = num1 / num2;
    227          if (operation.equals("+"))
    228              sumResult = num1 + num2;
    229          return sumResult;
    230      }
    231 
    232      // 判断是否正确输入运算方式
    233      private static boolean ispassString(String messString) 
    234      {
    235          boolean ispass = false;
    236          boolean operationIspass = true; // 记录被除数的状态
    237          int ai = 0; // 记录是否有运算符号的存在
    238          char[] IsString = messString.toCharArray();
    239          int num1 = 0;
    240          int num2 = 0;
    241          for (int i = 0; i < IsString.length; i++) 
    242          {
    243              // 记录有几对小括号的存在
    244              if ('(' == IsString[i])
    245                  num1++;
    246              if (')' == IsString[i])
    247                  num2++;
    248 
    249              // 判断除数是否为零
    250              if ('/' == IsString[i] && IsString[i + 1] == '0')
    251                  operationIspass = false;
    252 
    253              // 判断是否输入了运算符合
    254              if (IsString[i] == '+' || IsString[i] == '-' || IsString[i] == '*'
    255                      || IsString[i] == '/')
    256                  ai++;
    257 
    258              if (i == IsString.length - 1)
    259                  if (ai == 0)
    260                      num2++;
    261          }
    262          if (operationIspass)
    263              if (num1 == num2)
    264                  ispass = true;
    265          return ispass;
    266      }
    267 }
     
    package arrays.myArray;
    import java.util.Scanner;
    public class SortObjec {
     private static int intercePosition = 0; // 记录单个运算数据的长度
     private static int[] intercePositionIndex = null; // 记录“(”的下标
     private static int[] intercePositionEnd = null; // 记录“)”的下标
    
     public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      do {
       System.out.println("请输入你要计算的字符串(注意:只能输入数字和加,减,乘除符号;输入完毕后,请直接回车):");
       String numberString = input.next().trim();
       // 判断输入的运算字符串是否符合规定
       if (ispassString(numberString) == false) {
        System.out.println("您输入的计算字符串有误,请正确输入!");
       } else {
        // 计算结果返回
        System.out.println(interceResult(numberString));
       }
      } while (true);
     }
    
     // 判断是否有带括号的运算字符串存在
     private static String interceResult(String str) {
      String result = str;
      char[] numberString = str.toCharArray(); // 1+2+(1*2+1-1*2+5)+2+(1+5+9+10-11)+1*5/2+3
      // 1+8-9+(1*8/2-5+(1+2+8))+4/5*8/3*2
      int IndexStart = 0; // 记录“(”的实际数量
      int EndStart = 0; // 记录“)”的实际数量
      for (int i = 0; i < numberString.length; i++) {
       if ('(' == numberString[i]) {
        // 记录最后一个正括号的位置
        IndexStart = i;
       }
       if (')' == numberString[i]) {
        // 记录反括号的最初始下标的位置
        EndStart = i;
    
        // 截取最里面一个括号里的运算字符串
        result = result.substring(IndexStart + 1, EndStart);
    
        // 截取括号的运算字符串进行运算,生成新的运算字符串
        result = str.substring(0, IndexStart)
          + interceptOperation(result, '*', '/')
          + str.substring(EndStart + 1, str.length());
    
        // 回调执行,其它小括号的运算字符串
        return interceResult(result);
       }
       if (i == numberString.length - 1)
        if (EndStart == 0)
         break;
      }
      // 不存在括号了,再进行混合运算
      result = interceptOperation(str, '*', '/');
      return result;
     }
    
     // 不带括号的四则运算
     private static String interceptOperation(String operationNumber, char a,
       char b) {
      String mess = operationNumber;
      char[] stringOperation = mess.toCharArray();
    
      // 循环遍历运算字符串,并做相应的运算
      for (int i = 0; i < stringOperation.length; i++) {
    
       // 判断运算符所在的索引
       if (stringOperation[i] == a || stringOperation[i] == b) {
        if (i != 0) {
         // 运算符前的第一个数
         double num1 = interceptNumIndex(mess.substring(0, i));
    
         // 记录第一个数据的长度
         int frontPosition = intercePosition;
    
         // 运算符前的第二个数
         double num2 = interceptNumEnd(mess.substring(i + 1,
           stringOperation.length));
    
         // 记录第二个数据的长度
         int backPosition = intercePosition;
    
         // 算完乘除,将结果替换到原来运算的位置,得到新的运算字符串
         String IndexMess = mess.substring(0, i - frontPosition + 1);
         String IndexResult = "";
    
         // 判断是否运算到最后的结果了
         if (IndexMess.indexOf('+') == -1
           && IndexMess.indexOf('*') == -1
           && IndexMess.indexOf('/') == -1
           && IndexMess.lastIndexOf('-') == -1)
          IndexMess = "";
         if (IndexMess != "")
          IndexResult = IndexMess.lastIndexOf('-') == IndexMess
            .length() - 1 ? IndexMess.substring(0, i
            - frontPosition) : IndexMess;
    
         // 组装新的运算字符串
         mess = IndexResult// mess.substring(0,i-frontPosition+1)
           + reslutString("" + stringOperation[i], num1, num2)
           + mess.substring(i + backPosition + 1);
         // 0.111/1212/2/2/2/2/2/2/2
         if (mess.lastIndexOf('-') == 0 && mess.indexOf('+') == -1
           && mess.indexOf('*') == -1
           && mess.indexOf('/') == -1) {
          break;
         }
         // 回调,继续运算
         return interceptOperation(mess, a, b);// 1+7-5+89/3+4-6*8/2+4-6
        } else
         continue;
       }
       if (i == stringOperation.length - 1) {
        // 递归出口,判断是否还有运算字符串在
        if (mess.indexOf('+') != -1 || mess.indexOf('-') != -1)
         return interceptOperation(mess, '+', '-');
        break;
       }
      }
      return mess;
     }
    
     // 截取第二个数
     private static double interceptNumEnd(String str) {
      double a = 0;
      int InrerceIndex = 0;
      char[] stringOperation = str.toCharArray();
      boolean ispas = false; // 记录是否为负数
      for (int i = 0; i < stringOperation.length; i++) {
       switch (stringOperation[i]) {
       case '*':
       case '/':
       case '+':
       case '-':
        InrerceIndex = i;
        if (i != 0) // 判断该数是否为负数
         ispas = true;
        break;
       default:
        break;
       }
       if (ispas)
        break;
      }
      // 判断此数据是否在运算字符串的最后一位
      if (InrerceIndex == 0) {
       a = Double.parseDouble(str);
       intercePosition = str.length();
       if (ispas)
        intercePosition++;
    
      } else {
       a = Double.parseDouble(str.substring(0, InrerceIndex));
       // 记录数据的真实长度
       intercePosition = str.substring(0, InrerceIndex).length();
      }
      return a;
     }
    
     // 截取第一个数
     private static double interceptNumIndex(String str) {
      double a = 0; // 记录数据
      int InrerceIndex = 0; // 记录运算符的位置
      boolean temp = false; // 记录数据前运算符的状态
      char[] stringOperation = str.toCharArray();
      for (int i = stringOperation.length - 1; i >= 0; i--) {
       switch (stringOperation[i]) {
       case '*':
       case '/':
    
       case '+':
       case '-':
        InrerceIndex = i;
        temp = true;
        break;
       default:
        break;
       }
       if (temp)
        break;
      }
      // 判断此数据是否在运算字符串的第一位
      if (InrerceIndex == 0) {
       a = Double.parseDouble(str);
       intercePosition = str.length();
       // if(temp)
       // intercePosition++;
      } else {
       a = Double.parseDouble(str.substring(InrerceIndex, str.length()));
       // 记录数据的真实长度
       intercePosition = str.substring(InrerceIndex, str.length())
         .length();
      }
      return a;
     }
    
     // 计算结果
     private static double reslutString(String operation, double num1,
       double num2) {
      double sumResult = 0;
      if (operation.equals("*"))
       sumResult = num1 * num2;
      if (operation.equals("-"))
       sumResult = num1 - num2;
      if (operation.equals("/"))
       sumResult = num1 / num2;
      if (operation.equals("+"))
       sumResult = num1 + num2;
      return sumResult;
     }
    
     // 判断是否正确输入运算方式
     private static boolean ispassString(String messString) {
      boolean ispass = false;
      boolean operationIspass = true; // 记录被除数的状态
      int ai = 0; // 记录是否有运算符号的存在
      char[] IsString = messString.toCharArray();
      int num1 = 0;
      int num2 = 0;
      for (int i = 0; i < IsString.length; i++) {
       // 记录有几对小括号的存在
       if ('(' == IsString[i])
        num1++;
       if (')' == IsString[i])
        num2++;
    
       // 判断除数是否为零
       if ('/' == IsString[i] && IsString[i + 1] == '0')
        operationIspass = false;
    
       // 判断是否输入了运算符合
       if (IsString[i] == '+' || IsString[i] == '-' || IsString[i] == '*'
         || IsString[i] == '/')
        ai++;
    
       if (i == IsString.length - 1)
        if (ai == 0)
         num2++;
      }
      if (operationIspass)
       if (num1 == num2)
        ispass = true;
      return ispass;
     }
    }
    
    
    
    
    

    
    
    结对编程体会:
      结对编程是两个人在一起完成四则运算项目,我自己能力不足,在一起商量的过程中发现对方很多优点是我不及的,那么也让我在这个过程中向自己的小伙伴学习了很多,
    她熟悉Java,而我只是知道一点点,在Java这一面我可以向她请教。两个人在一起可以有商量的去做项目,两个人可以互通想法,这样每个人都有了两个idea,结对编程很好,
    让我看到自己的不足,并且改正。

  • 相关阅读:
    python 列表
    pytho set集合
    python 字典
    并发编程(原理篇 上)
    面向对象分析方法
    python 小记 整数与小数id
    python入门 第二天笔记
    python 元组问题解决
    python入门第一天作业。讲师写的代码。
    python学习笔记enumerate()与range(len)运用及赋值小计
  • 原文地址:https://www.cnblogs.com/lffang/p/5887944.html
Copyright © 2011-2022 走看看