做業: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.githtml
看題後不要着急編碼,將題目中涉及的功能列出來,肯定可能存在的技術難點。功能一/二實際上就是對操做數、操做符進行操做,這裏涉及到的就是核心功能「表達式求值」,輸入、輸出格式處理都不用着急着去解決。表達式的重複性檢驗目前沒有想到咋用代碼實現,待定中。其餘想法晚上找文檔再補充。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; }
//隨機整數 //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顯示屏
隊友:袁玥
結對編程能有啥感覺呢?我以爲我本身不咋滴,然而其餘人都以爲我還不錯。接觸福大以及其餘學校的同窗,我清楚認識本身的能力還遠遠不足以被他人看得上。和個人隊友結對編程,我能看到她的不足,編程能力、與人溝通,這樣的問題一樣存在於我本身身上。如何把本身的想法,對於這個小項目如何去作,怎麼去作,闡述清楚,對我而言,仍是很難啊。關於合做過程當中存在較長爭論的的事件以下:dom