构建之法--熟悉使用工具
作者:互联网
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上妥善的保管代码。
标签:opStack,++,算式,构建,熟悉,sb,input,工具,post 来源: https://www.cnblogs.com/guduxuanze2014/p/11546111.html