作业:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/997

代码:https://coding.net/u/Dawnfox/p/f4/git/tree/master/code

git地址:https://git.coding.net/Dawnfox/f4.git

一、解题思路

看题后不要着急编码,将题目中涉及的功能列出来,确定可能存在的技术难点。功能一/二实际上就是对操作数、操作符进行操作,这里涉及到的就是核心功能“表达式求值”,输入、输出格式处理都不用着急着去解决。表达式的重复性检验目前没有想到咋用代码实现,待定中。其他想法晚上找文档再补充。

二、需要注意的地方

请查看博客【点击

三、难点

  • 表达式求值

    构造两个栈,一个放操作数,另一个放操作符,通过入栈、出栈进行运算,将“=”作为表达式结束的符号。
        //求表达式值
static public String OpsExp(string[] arr)
{
arr = arr.Where(s => !string.IsNullOrEmpty(s)).ToArray();
Stack<string> ovs = new Stack<string>();//操作数
Stack<string> ops = new Stack<string>();//操作符
String res = "";
foreach (string str in arr)
{
if (str.Equals("="))
{
while (ops.Count != 0)
{
if (ovs.Count >= 2)
{
string firOps = ovs.Pop();
string secOps = ovs.Pop();
string onceOps = ops.Pop();
String[] resOps = OpsAl(secOps, firOps, onceOps);
if (IsValid(resOps[0]))
{
ovs.Push(resOps[1].ToString()); }
else
{
return res; } }
} if (ops.Count == 0)
{ res = ovs.Pop();
break;
} } if (Regex.IsMatch(str, ovsArr))
{
ovs.Push(str);
}
else if (opsArr.Contains(str))
{
//第一个运算符
if (ops.Count == 0)
{
ops.Push(str);
}
else
{ //遇到左括号
if (str.Equals("("))
{
ops.Push(str);
} //15/12/24 3:30 by hr
// 还需要考虑括号隔两个操作符的情况!
//遇到右括号且当前栈顶元素为左括号
//if (str.Equals(")") && ops.Peek().Equals('('))
if (str.Equals(")"))
{
//还需要考虑括号隔两个操作符的情况!
while (!ops.Peek().Equals("("))
{
if (ovs.Count >= 2)
{
string firOps = ovs.Pop();
string secOps = ovs.Pop();
string onceOps = ops.Pop();
String[] resOps = OpsAl(secOps, firOps, onceOps);
if (IsValid(resOps[0]))
{
ovs.Push(resOps[1].ToString());
}
else
{
return res;
}
} }
if (ops.Peek().Equals("("))
{
ops.Pop();
} } if ((str.Equals("+") || str.Equals("-") || str.Equals("*") || str.Equals("/")))
{ //当前操作符优先级低于操作符栈顶元素优先级
if (!ops.Peek().Equals("(") && Priority(ops.Peek()) >= Priority(str))
{
if (ovs.Count >= 2)
{
string firOps = ovs.Pop();
string secOps = ovs.Pop();
string onceOps = ops.Pop();
String[] resOps = OpsAl(secOps, firOps, onceOps);
if (IsValid(resOps[0]))
{
ovs.Push(resOps[1].ToString());
ops.Push(str);
}
else
{
return res;
} }
} //当前运算符优先级大于运算符栈顶元素优先级
if (!ops.Peek().Equals("(") && Priority(ops.Peek()) < Priority(str))
{
ops.Push(str);
} if (ops.Peek().Equals("("))
{
ops.Push(str);
} }
} }
else
{
Console.WriteLine("存在不合法数据或符号");
break;
} } return res;
}
  • 随机数重复?不重复?

    C#的随机函数是伪随机,直接使用随机函数是从一定范围内获取随机数,多次获取随机数,是可能存在取到相同的随机数。因此需要选择时间作为种子,同时检测每次生成的随机数是否已经存在,若存在,则保留,否则继续产生随机数。
        //随机整数
//number 随机数个数,isDuplicated 随机数是否重复(true 重复,false 不重复)
static public int[] GetRadomDigits(int number,int minValue, int maxValue, bool isDuplicated) {
Random ra = new Random((int)DateTime.Now.Ticks); int[] resNums = new int[number];
int tmpNum = 0, i=0;
for (i = 0; i < number; i++) {
tmpNum = ra.Next(minValue, maxValue); //检测随机数是否重复
while (resNums.Contains(tmpNum)&&!isDuplicated)
{
tmpNum = ra.Next(minValue, maxValue);
}
resNums[i] = tmpNum;
} return resNums;
}
  • 写文件

    检验文件路径的合法性,将内容格式化输出,内容追加(若存在指定文件,则追加到文件尾,否则新建指定的文件)。
        //写文件 所有
//todo 路径合法性检验
static public void WriteFile(string path, Dictionary<String, String> contents)
{
FileStream fs = new FileStream(path, FileMode.Append);//若存在指定文件则追加到文件尾 否则新建文件
StreamWriter sw = new StreamWriter(fs);
String content = "";
foreach (KeyValuePair<String, String> ele in contents)
{
content = string.Format("{0,-30}{1,-10}", ele.Key, ele.Value); //格式化输入内容
sw.WriteLine(content);
} sw.Flush();//清空缓冲区
//关闭流
sw.Close();
fs.Close();
}

四、结对编程

工作地点:东北师范大学传媒软件所。

计算机: Windows 版本 10.0.15063 64位+外接dell显示屏

队友:袁玥



结对编程能有啥感受呢?我觉得我自己不咋滴,然而其他人都觉得我还不错。接触福大以及其他学校的同学,我清楚认识自己的能力还远远不足以被他人看得上。和我的队友结对编程,我能看到她的不足,编程能力、与人沟通,这样的问题同样存在于我自己身上。如何把自己的想法,对于这个小项目如何去做,怎么去做,阐述清楚,对我而言,还是很难啊。关于合作过程中存在较长争论的的事件如下:

  • 说服队友不要直接编码,先列举这个项目存在的技术难点、功能,做技术原型,然后 再开始编码。大约90min。让队友自己独立编码,按照她自己的想法,我在旁边看着。
  • 功能四是否做还是不做呢。一开始纠结了,做了相关的技术原型,如公倍数、公约数等。然后放弃了,时间不允许。
  • 代码规范。和伙伴分别阅读老师作业推荐的博文,然后将各自总结的规范给对方看,相互提意见,最后综合到一起。
  • 测试用例。是先写部分用例呢,还是写完代码后再开始写测试用例?最终是先写了功能测试的测试用例,在完成基础功能后,开始进行核心功能的单元测试。
  • 谁来编码?我代码能力相对好点,然而还是决定让队友多花时间写写代码,我在旁边看着她写,给她提意见。有利于自己提高处理代码细节的能力,也能让我的表达能力得到训练。

四则运算V1.1的更多相关文章

  1. 利用原生Javascript实现计算器(未完待续)

    这里,将记录我升级四则运算v1.2的整个过程. 环境检测,杨说检测环境也是可以高兴到手舞足蹈的一件事. 为了实现自动化,Testing,查阅相关资料,我这里使用了node(这里为了npm).yoema ...

  2. 四则运算可能需要注意的地方V1.1

    作业:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/997 文档下载:https://coding.net/u/Dawnfox/p/ ...

  3. 一种高效的 vector 四则运算处理方法

    实现 vector 的四则运算 这里假设 vector 的运算定义为对操作数 vector 中相同位置的元素进行运算,最后得到一个新的 vector.具体来说就是,假如 vector<int&g ...

  4. 第十七周oj刷题——Problem B: 分数类的四则运算【C++】

    Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Outpu ...

  5. 基于GUI的四则运算

    基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...

  6. 浏览器仿EXCEL表格插件 版本更新 - 智表ZCELL产品V1.3发布

    智表(zcell)是一款浏览器仿excel表格jquery插件.智表可以为你提供excel般的智能体验,支持双击编辑.设置公式.设置显示小数精度.下拉框.自定义单元格.复制粘贴.不连续选定.合并单元格 ...

  7. 软件工程启程篇章:结对编程和进阶四则运算(197 & 199)

    0x01 :序言:无关的事 I wrote a sign called "Dead End" in front of myself, but love crossed it wit ...

  8. 代码规范V1.1

    作业要求:[https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/993] 代码规范文档/代码规范执行记录:[https://coding. ...

  9. 四则运算4 WEB(结对开发)

    在第三次实验的基础上,teacher又对此提出了新的要求,实现网页版或安卓的四则运算. 结对开发的伙伴: 博客名:Mr.缪 姓名:缪金敏 链接:http://www.cnblogs.com/miaoj ...

随机推荐

  1. python 自然语言处理(二)____获得文本语料和词汇资源

    一, 获取文本语料库 一个文本语料库是一大段文本.它通常包含多个单独的文本,但为了处理方便,我们把他们头尾连接起来当做一个文本对待. 1. 古腾堡语料库 nltk包含古腾堡项目(Project Gut ...

  2. jquery select使用

    <select class="selector"></select> 1) 设置选中值为pxx的选项 $('.selector').val('pxx'); ...

  3. Win10系列:UWP界面布局基础9

    在XAML中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...

  4. printf以%d形式输出浮点数的问题

    若运行时从键盘上输入9876543210l,则下面程序的输出结果是 int main(){ int a;float b,c; scanf("%2d%3f%4f",&a,&a ...

  5. 使用laravel搭建CURD后台页面

    配置即一切 一切皆于需求,后台从0开始搭建,但是写了一两个页面后发现太多的是对单表的增删改查操作,于是就想到了,能不能做一个快速搭建的后台.想到一句话,配置即一切.如果一个CURD后台能只进行配置就自 ...

  6. caffe模型参数解释

    作者:wjmishuai 出处: http://blog.csdn.net/wjmishuai/article/details/50890214 原始数据是28*28 1:数据层: layer { n ...

  7. 二. Python基础(2)--语法

    二. Python基础(2)--语法 1.实现一个简单的登录系统 '''# 形式1 n = 1 while n < 4:     name = input("请输入姓名\n" ...

  8. Android : apk签名的多种方法以及key的配置

    方法一:使用Android SDK中的签名工具给apk签名: (1)Android源码的 build/target/product/security/ 目录下有 media.pk8.media.x50 ...

  9. 3.5 C++间接继承

    参考:http://www.weixueyuan.net/view/6362.html 总结: 假设类C继承自类B,类B继承自类A.那么类C中的除了能够继承B类的成员函数和成员变量外,同样也能继承B类 ...

  10. 2.19 C++友元函数和友元类

    参考: http://www.weixueyuan.net/view/6350.html 总结: 借助friend关键字将其声明为友元函数,结果,在display函数体内,我们就能访问private属 ...