欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/12/20 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 构建之法--熟悉使用工具 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
GIT地址MyGit
GIT用户名liuxingbumie2014
学号后五位62408
博客地址博客
作业链接链接

1.配置过程

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

2.代码设计的思路

  • 获取随机算式
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 0if (sb.ToString().Contains("/0")) {i--;continue;}
  • 设计一个Compute类将算式转化为后缀表达式并求值
//中缀表达式转后缀表达式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();//最后的结果为栈顶元素}//计算结果public 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;}
  • 得到结果并排除结果为小数负数的算式
if (result.ToString().Contains(".") || result<0) {i--;continue;}sb.Append('=');sb.Append(result);
  • 将算式输出
  • 完整代码见Git

3.github克隆项目

  • 1、fork项目 点击Clone or download 复制链接
  • 2、克隆到本地项目 git clone +链接

4.单元测试

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

  • 点击菜单栏的测试->运行->所有测试 左侧绿色勾表示测试通过,测试Operate函数,测试四则运算。测试结果通过
  • 测试Calculate函数,,验证输入算术式能否得到正确的结果。测试结果通过

5.效能分析

  • 硬编码n为一百万
  • 点击菜单栏 分析->性能探查器 勾选CPU测试率 开始 效能分析。即使程序没跑完,效能分析也能强行结束。让程序跑几分钟,点击停止收集
  • 下图是效能分析报告
  • 要想获得更详细的报告,点击上图中的创建详细的报告...,创建完成后进入一个后缀为 .vspx 的文件,如下图所示
  • 点进Calculator.Program.Main 可以看见函数占用时间的百分比,从而优化代码

6.提交代码

  • 使用git status查看本地改动是否add和commit
  • 将工作区"新建/修改"的文件添加到暂存区
  • 将暂存区内容添加到本地库
  • 使用 push 命令后,会弹出一个窗口要求登录 Github,此时输入 Github 的 用户名或邮箱 与 密码 即可成功 push。
  • 完成 push 后,向源仓库发起 Pull Request,点击 New pull request
  • 点击 Create pull request 即可发起请求

  • git常用命令
git status //查看工作区,暂存区状态 git branch//显示所有分支 git add . //将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录 git commit -m "分支" //将暂存区内容添加到本地库 git push //将本地版本库的分支推送到远程服务器上对应的分支

7.问题&解决

  • 使用后缀表达式求值时遇到瓶颈,因为一般的后缀表达式求值的操作数都是个位数,后来参考了该博客解决了问题,在遍历算式字符串时当遍历的字符是数字时继续遍历,直到不是数字为止。将得到的数字拼成一个数字然后在后缀字符串中以‘#’分割。

8.总结

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

转载于:https://www.cnblogs.com/guduxuanze2014/p/11546111.html

总结

以上是生活随笔为你收集整理的构建之法--熟悉使用工具的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。