第二次个人作业
GIT地址 | GitHub |
---|---|
GIT用户名 | ZW1913 |
学号后五位 | 24216 |
博客地址 | 我的博客 |
作业链接 | 作业 |
一、配置环境
1.VS2019 安装
这里不是用的的C++组件,而是C#
2.GIT 安装
二、克隆项目
1.进入我的GitHub主页
2.进入阿超(老师)的仓库 地址,fork后到自己的仓库里
3.将项目克隆进入我的电脑,并且在AchaoCalulator文件夹(E:)中新建一个与自己GitHub用户名相同的文件夹
三、设计思路和代码实现
1.设计思路
- 定义了四个变量,三个用来存整数,一个用来存结果;
- 用if…else来判断对错;如果是对,则自增继续向下进行,否则在提示出错的情况下还会计算出正确结果用来反省计算;
- 用Random()方法来进行随机数的生成;
- 总体是分为加减法一类和乘除法一类,然后再用键盘来输入(最开始是借鉴的加减乘除共四类的想法,变成了两类之后想要在把加减乘除合并成一类然后随机生成计算,不过太难了,就放弃了?)
2.代码实现
这个是主类;对应设计思想里面的生成随机数和键盘选择运算哪一类两个作用
class Program
{
static void Main(string[] args)
{
mathvoid op = new mathvoid();
string Z = "";
do
{
int z = new Random().Next(4) + 1;
switch (z)
{
case 1:
op.mathjia();
continue;
case 2:
op.mathjian();
continue;
case 3:
op.mathcheng();
continue;
case 4:
op.mathchu();
continue;
default:
Console.WriteLine("输入无效!");
continue;
}
break;
}
while (true);
}
}
这是减法板块,还有记录答对答错总数
public void mathjian()
{
int result;
int a, b, c;
Random rd = new Random();
a = rd.Next(0, 101);
b = rd.Next(0, 101);
c = rd.Next(0, 101);
Console.WriteLine("请计算:{0}-{1}-{2}=?", a, b, c);
result = Convert.ToInt32(Console.ReadLine());
if (result == a - b - c)
{
Console.WriteLine("回答正确!");
right++;
}
else
{
Console.WriteLine("错误,正确的答案是" + (a - b - c));
wrong++;
}
}
public static int right = 0;
public static int wrong = 0;
这是加法板块
public void mathjia()
{
int a, b, c;
int result;
Random rd = new Random();
a = rd.Next(0, 101);
b = rd.Next(0, 101);
c = rd.Next(0, 101);
Console.WriteLine("请计算:{0}+{1}+{2}=?", a, b, c);
result = Convert.ToInt32(Console.ReadLine());
if (result == a + b + c)
{
Console.WriteLine("回答正确!");
right++;
}
else
{
Console.WriteLine("错误,正确的答案是" + (a + b + c));
wrong++;
}
}
这是乘法板块
public void mathcheng()
{
int a, b,c;
int result;
Random rd = new Random();
a = rd.Next(0, 101);
b = rd.Next(0, 101);
c = rd.Next(0, 101);
Console.WriteLine("请计算:{0}*{1}*{2}=?", a, b,c);
result = Convert.ToInt32(Console.ReadLine());
if (result == a * b * c)
{
Console.WriteLine("回答正确!");
right++;
}
else
{
Console.WriteLine("错误,正确的答案是" + (a * b * c));
wrong++;
}
}
这是除法板块,因为是int型的,不会出现小数字,在后面的规定中规定了不能出现为0的情况,那无意义
public void mathchu()
{
int a, b,c;
int result;
Random rd = new Random();
a = rd.Next(0, 1000);
b = chooseRandomFactor(a);
c = chooseRandomFactor(b);
if (b != 0 && c !=0)
{
Console.WriteLine("请计算:{0}/{1}/{2}=?", a, b,c);
result = Convert.ToInt32(Console.ReadLine());
if (result == a / b)
{
Console.WriteLine("回答正确!");
right++;
}
else
{
Console.WriteLine("错误,正确的答案是" + (a / b /c));
wrong++;
}
}
这是最后的记录总共的个数,用数组来存储
private static int chooseRandomFactor(int num)
{
int[] arr = new int[num + 1];
int size = 0;
for (int i = 1; i <= Math.Sqrt(num); i++)
{
if (num % i == 0)
{
arr[size++] = i;
arr[size++] = num / i;
}
}
int r = new Random().Next(size);
return arr[r];
}
这个是最后的控制台结果
3.代码提交
这里没有截图到GitHub那个登录界面是因为忘记了截图了,这个界面是在密码错误的时候再次验证的SSH入口,是相同的登录接口,就没有浪费时间进行返工找到GitHub界面了
四、单元测试和回归测试
新建测试项目
添加要测试的项目
测试的代码块
public class UnitTest1
{
[Fact]
public void Test1()
{
new _Random.mathvoid().mathjian();
Assert.Equal(1, 1);
}
}
PS:小声bb,这个地方单元测试的时候给了一组值,结果确实与输出的相同,不过在自己多弄了几次之后左边的蓝框框就没有啦,后来大佬指点我说这个地方我写的测试是一定会通过的?,就是在执行的时候相当于给定了一个值 ,再把结果好像也直接确定了,没有走中间的步骤,我就。。。。然后再弄越改越难受,错误越多,就emmmm…?很伤,差距太大了5555,抄都抄不好
五、效能工具
分析的时候自己做了大概100题左右(跟他们的自动生成题目数差距也太大了?)
详细报告
六、提交到GitHub
七、总结提高
- 整体做下来是在借鉴网上的结果的情况下按照自己的想法改变了一些之后的结果,修改之后控制台出来的样子变了,然后从原来的十以内的两位数变成了100以内的计算
- 不足之处就太多了,首先,没有把加减乘除弄到一起去(实在搞不来)
- 其次,没有能够一次性生成想要的题目数量,这一点主要是在效能分析的时候他们可以一次生成10000题,我这个还得慢慢地搞,不过,我觉得这样子更加符合要求一些,做一道题就可以出来一题的结果,及时反思(这里我觉得还可以加上那种动态的计算过程,不过只存在于想法了?)
- 最后就是单元测试时候自己的问题了,还有一些问题
- 然后就是英文版的软件确实比较难受,就像是一个痛点一样,很难受,应该尽快熟悉这样的学习模式,不论是这里的git,github还是后面的很多学习软件都一样,努力提升才是关键
- 总之,这次作业真的打脑壳,在网上借鉴下来之后自己居然还有这么多问题就值得思考了。。。