用List寫小算盤(先乘除後加減) C#

兩年多年前,初踏入「碼農」「程式猿」的世界,從零開始學習

一開始的VB ,後來的C# ,到最近學著JAVA

後來明白,專精一個程式,懂了之後,再學其它程式就沒有那麼難了。

今天終於,把計算機這個作業完成啦~

不過小數點,未完成....

還是菜菜菜時,用if .... 來寫
後來用 case ,再來用陣列
但寫到最後都失敗

後來因為一位新來的同事一句話,點醒了我

對!用List

果真,回家後,馬上試著寫
寫出一版,雖然自已測試沒出現bug
明天請同事幫我試試~


 private void equal_Click(object sender, EventArgs e)
        {
            String value = textBox1.Text.Replace(" ", "");
            char[] separators = { '+', '-', '*', '/' };
             String[] sub  = value.Split(separators);
            List<String> substrings = new List<String>(sub);

            //進入運算
            cc(substrings, substrings1 );
         
         
            substrings1.Clear();

            textBox1.Text += "\r\n\r\n" + substrings[0].ToString();
         
        }

 Double temp1;
        public void cc(List<String> substrings, List<String> substrings1)
        {
            //依序先乘除後加減
            List<string> ho = new List<string>(new string[] { "*", "/", "+", "-" });

            //依序先乘除後加減
            foreach (string hh in ho)
            {
                // 尋找List有沒有某某值,若有則進入迴圈
                while (substrings1.Contains(hh))
                {
               
                    //某值在数组中的索引
                    int i = substrings1.IndexOf(hh);
                    int ii = substrings1.IndexOf(hh)+1;

                    temp1 = 0;
                    string u = substrings[i];
                    string q = substrings[ii];
                    if (hh == "*")
                    {
                        temp1 = (Convert.ToDouble(u)) * (Convert.ToDouble(q));
                    }
                    else if (hh == "/")
                    {
                        temp1 = (Convert.ToDouble(u)) / (Convert.ToDouble(q));
                    }
                    else if (hh == "+")
                    {
                        temp1 = (Convert.ToDouble(u)) + (Convert.ToDouble(q));
                    }
                    else
                    {
                        temp1 = (Convert.ToDouble(u)) - (Convert.ToDouble(q));
                    }
                 
                    substrings[i] = Convert.ToString(temp1);
                    //清除已計算過的數值
                    substrings.RemoveAt(ii);
                    substrings1.RemoveAt(i);
                 
                    if (substrings1.Contains(hh))
                    {
                        continue;//若還有相同的運算符,回到while
                    }
                 
                }
            }
        }

         

留言

這個網誌中的熱門文章

[C#]跨網頁自動傳值之Selenium grid 安裝與使用