第二次作业
| Git地址 | 我的Git地址 |
| Git用户名 | t384061961 |
| 学号后五位 | 62121 |
| 博客地址 | 博客地址 |
| 作业链接 | 作业链接 |
1.配置环境时遇到的问题
我是去年就已经安装好过VS2017,所以说配置环境这一步省去了
下面是用git clone的截图
###2.代码设计思路 先想清楚整体逻辑,再动手写代码 - 首先是算术表达式的类Formula - 然后是处理运算符优先级的类Priority - 最后是处理表达式以及运算的类Calculate ####1)Formula类中含一个MakeFormula()方法 关键代码展示 ``` while (start <= count) { int opreation = random.Next(0, 4); int otherNumber = random.Next(0, 100); build.Append(op[opreation]).Append(otherNumber);//利用stringbuilder类中的Append方法来生成表达式 start++; }
####2)处理运算符优先级的类Priority为各个运算符定义优先级
关键代码展示
public static Dictionary<string, int> dicOperators = new Dictionary<string, int>
{
{"+",0},
{"-",1},
{"",2},
{"/",3},
{"#",4}
};
public static int[,] PriorityList = new int[,]{
/行为入栈运算符,列为栈顶运算符,2表示等于号,1表示大于号,
0表示小于号,-1表示错误的匹配/
public static int[,] PriorityList = new int[,]{
/行为入栈运算符,列为栈顶运算符,2表示等于号,1表示大于号,
0表示小于号,-1表示错误的匹配/
/ '+','-','','/','#'/
/'+'/{ 1, 1, 0, 0, 1},
/'-'/{ 1, 1, 0, 0, 1},
/''/{ 1, 1, 1, 1, 1},
/'/'/{ 1, 1, 1, 1, 1},
/'#'*/{ 0, 0, 0, 0, 2},
};
####3)最后是处理表达式以及运算的类Calculate,字符串处理是将表达式分割并入队列再进行后续操作,在其中定义了两个辅助栈(一个数据栈,一个符号栈)

<span style="color:red;font-size:16px"> 上面是我画的简易图,可能不好理解,见谅</span>
关键代码展示
public List
{
List
Stack
inOrder.Push("#");
int count = q.Count;
for (int i = 0; i < count;i++ )
{
string item = q.Dequeue();
if (isOperateors(item))
{
string m = inOrder.First();
int n = Priority.isPriority(Priority.dicOperators[inOrder.First()],
Priority.dicOperators[item]);
while (n == 1)
{
string temp = inOrder.Pop();
if (temp != "(" && temp != ")")
{
posterOrder.Add(temp);
}
n = Priority.isPriority(Priority.dicOperators[inOrder.First()],
Priority.dicOperators[item]);
}
if (n == 2)
{
inOrder.Pop();
}
else if (n != -1)
{
inOrder.Push(item);
}
else
{
return null;
}
}
else
{
posterOrder.Add(item);
}
}
return inOrder.Count == 0 ? posterOrder : null;
}
<br>
用于计算
public string Arithmetic(string x,string y,string operators)
{
decimal a = decimal.Parse(x);
decimal b = decimal.Parse(y);
decimal result = 0;
switch (operators)
{
case "+":
result = a + b;
break;
case "-":
result = a - b;
break;
case "*":
result = a * b;
break;
case "/":
result = a / b;
break;
}
return result.ToString();
}
程序运行结果如下

<span style="color:red;font-size:16px">下面是单元测试的截图,由于自己对测试不熟悉,第一个方法进行单元测试的很模糊</span>



<span style="color:red;font-size:16px">第二个单元测试计算方法</span>

<span style="color:red;font-size:16px">上面的错误是由于我自己编写测试代码的时候出的问题..下面是代码更正后的测试效果</span>

###3)提交代码
<span style="color:red;font-size:16px">讲道理提交代码搞得人没了,第一次太艰难了,我到现在都不知道弄对没</span>
步骤如下图
创建一个C#分支

使用git add和git commit

确认

使用git push

登陆之后到仓库看发现好起来了

###4)本次工具的使用感想
<span style="color:blue">配置环境什么的都还好,主要C#代码很久没写了,看了java版的源码然后研究了网上所给出的办法,第一种使用栈来解决,java源码里面也是使用的栈
第二种是用树来遍历。个人数据结构学的不好,但听过一部分,理解起来不是很困难,但是代码实现还是挺难受的,参考了许多网上的版本,加上自己的修改
就做到这样了。后面的git第一次使用起来真的比较难受,主要是网上的教程看得不是很懂,花了一晚上来把这个git提交代码弄出来,然后就是单元测试,我以前
没有做测试的习惯,所以对测试这一块是真的薄弱,单元测试都做不明白,路还长,任重而道远</span>