构建之法--熟悉使用工具

GIT地址 MyGit
GIT用户名 liuxingbumie2014
学号后五位 62408
博客地址 博客
作业链接 链接

1.配置过程

配置过程没什么问题,从官网下载安装程序,勾选.Net桌面开发即可。

2.代码设计的思路

  • 获取随机算式

    for (i = 0; i < n; i++) {
    StringBuilder sb = new StringBuilder();
    Random rd = new Random(Guid.NewGuid().GetHashCode());
    operatorNum = rd.Next(2, 4);

                  for (j = 0; j < operatorNum; j++) {
                      sb.Append(rd.Next(0, 101));
                      sb.Append(opera[rd.Next(0, 4)]);
                  }
                  sb.Append(rd.Next(0, 101));
  • 排除除数为0的算式

    //check dividend 0
    if (sb.ToString().Contains("/0")) {
    i--;
    continue;
    }
  • 将算式转化为后缀表达式并求值

    //中缀表达式转后缀表达式
    //其他类型自行转换
    public void DoTrans() {
    for (int i = 0; i < input.Length; i++) {
    if(input[i] >= '0' && input[i] <= '9') {
    while(input[i] >= '0' && input[i] <= '9') {
    post[z++] = input[i++];
    if (i == input.Length) {
    break;
    }
    }
    post[z++] = '#';
    i--;
    }else if (input[i]=='+' || input[i]=='-') {
    OperationOpStack(input[i], 1);
    } else if (input[i] == '*' || input[i] == '/') {
    OperationOpStack(input[i], 2);
    }
    }
    while (opStack.Count != 0) {
    post[z++] = opStack.Pop();
    }
    }

          //运算符栈操作
          public void OperationOpStack(char opThis, int prec1) {
              while (opStack.Count != 0) {
                  char opTop = opStack.Pop();
                  int prec2;
                  if (opTop == '+' || opTop == '-') {
                      prec2 = 1;
                  } else {
                      prec2 = 2;
                  }
                  //比较优先级
                  if (prec2 < prec1) {
                      opStack.Push(opTop);
                      break;
                  } else {
                      post[z++] = opTop;
                  }
              }
              opStack.Push(opThis);
          }
    
          //后缀表达式求值
          public double Calculate() {
              num=new Stack<double>();//操作数堆栈
              double a = 0, b = 0;
              for(int i = 0;i<z;i++) {
                  if (post[i] >= '0' && post[i] <= '9') {
                      int tmp = 0;
                      while (post[i] >= '0' && post[i] <= '9') {
                          tmp = tmp * 10 + Convert.ToInt32(post[i] - '0');
                          i++;
                      }
                      num.Push(tmp);
                  }else if (post[i] == '#') {
                      continue;
                  } else {
                      a = num.Pop();
                      b = num.Pop();
                      num.Push(Operate(b, a, post[i]));
                  }
              }
              return num.Pop();//最后的结果为栈顶元素
          }
    
          //计算结果
          double Operate(double first, double second, char op) {
              double res = 0;
              switch (op) {
                  case '+':
                      res = first + second;
                      break;
                  case '-':
                      res = first - second;
                      break;
                  case '*':
                      res = first * second;
                      break;
                  case '/':
                      res = first / second;
                      break;
                  default:
                      break;
              }
              return res;
          }

-得到结果并排除结果为小数负数的算式

//get result and check decimals
                Compute cm = new Compute(sb);
                cm.DoTrans();
                result = cm.Calculate();
                if (result.ToString().Contains(".") || result<0) {
                    i--;
                    continue;
                }
  • 将算式输出

    foreach (var m in exercise) {
    string path = @"C:\Users\hasee\Desktop\博客\MyCalculator\AchaoCalculator\1.txt";
    FileInfo fileInfo = new FileInfo(path);
    StreamWriter sw = fileInfo.AppendText();
    sw.WriteLine(m);
    sw.Flush();
    sw.Close();
    Console.WriteLine(m);
    }
  • 结果

3.github克隆项目

  • 1、fork项目
  • 2、克隆到本地项目

4.单元测试

  • 在方法处右键,点击创建单元测试(注意方法和类必须为pubic),不然会出现以下提示

  • 编写简单的测试代码 点击菜单栏的测试->运行->所有测试 左侧绿色勾表示测试通过

5.回归测试和效能分析

  • 点击菜单栏 分析->性能探查器 勾选CPU测试率 输入1000,下图是效能分析报告

6.提交代码

  • 使用git status查看本地改动是否add和commit
  • 使用 push 命令后,会弹出一个窗口要求登录 Github,此时输入 Github 的 用户名或邮箱 与 密码 即可成功 push。
  • 完成 push 后,向源仓库发起 Pull Request,点击 New pull request
  • 点击 Create pull request 即可发起请求

7.总结

以前我以为只要编写能运行的程序就行,现在我知道得编写单元测试、回归测试来保证代码的正确性,因为现实中不一定总遇到合法的输入,进行单元测试能保证代码的容错性。同时进行效能分析,发现哪些代码更耗时间,方便修改和提升效率。Git也很强大,能够在本地和github上妥善的保管代码。

猜你喜欢

转载自www.cnblogs.com/guduxuanze2014/p/11546111.html