1. 程式人生 > >第四課輸入時的細節處理——C#計算器程式設計教學

第四課輸入時的細節處理——C#計算器程式設計教學

第一課中講到,算式是有規矩的,不能任何輸入都作有效輸入,所以判斷是否有效輸入,這是第三課講到了AddCaclString方法的負責處理。今天就專門講這個方法。

先上程式碼:

        private void AddCaclString(bool isDecimal, bool isOP, string str)
        {
            if (!isDecimal && !isOP)
            {
                if (str == "0" && CaclString == "0")
                {
                    return;//這是什麼情況?你自己想。
                }
                CaclString += str;
                isOPAdded = false;//你得先新增Cacl的私有變數
            }
            else
            {
                if (isDecimal)
                {
                    if (!haveDecimal)
                    {
                        CaclString += str;
                        haveDecimal = true;//你得先新增Cacl的私有變數
                        isOPAdded = false;
                    }
                }
                else
                {
                    if (isOP && CaclString != "")
                    {
                        if (!isOPAdded)
                        {
                            CaclString += str;
                            isOPAdded = true;
                            haveDecimal = false;
                        }
                        else
                        {
                            CaclString = CaclString.Remove(CaclString.Length - 1, 1) + str;//這又是什麼情況?
                            isOPAdded = true;
                            haveDecimal = false;
                        }
                    }
                }
            }
        }
這裡說到了要新增私有變數,就是協助判斷輸入的有效性和順序的嚴謹性。
private bool haveDecimal = false;//是否已輸入小數點。
private bool isOPAdded = false;//是否已輸入操作符。
所謂私有,就是外界不知道的,自己在操作過程中定義的變數是為了協助判斷。這種程式設計思想必須瞭解和掌握,畢竟就是WinForm中的每一個控制元件都會有很多控制私有變數,程式設計就是要有這種新增輔助變數的基本素養。
那麼這兩個變數是幹什麼用的呢?
算式輸入小數點、數字、運算子,你得判斷現在輸入在什麼位置,是還是繼續輸入數字,還是輸入小數點,本數字已經輸入小數點了又再次輸入小數點當然是作無效判斷,那麼輸入了操作符,意思就是輸入下一個數字,那麼又進入下一輪判斷,如此迴圈而已。

這段程式解決了輸入判斷有效性的問題,如果讓你自己寫,會是個什麼樣子?可能還有漏洞,比如我只是解決了算式開頭輸入0後不能輸入其它數字的問題,但中間 數字沒有解決。這其實無關程式執行結果,所以我沒有再考慮這個問題。
第四課結語。
判斷往往需要輔助變數,善於新增輔助變數是程式設計師的基本能力。

相關推薦

輸入細節處理——C#計算器程式設計教學

第一課中講到,算式是有規矩的,不能任何輸入都作有效輸入,所以判斷是否有效輸入,這是第三課講到了AddCaclString方法的負責處理。今天就專門講這個方法。 先上程式碼: private void AddCaclString(bool isDecimal,

輸入和顯示——C#計算器程式設計教學

首先完成輸入功能。前面講到了那個語句cacl.EnterString(key);那麼,方法EnterString(string str)是必須有的,而且是public。 最先想到的迴圈語句是什麼呢?想想介面上的Button的Text,都是不同的,但有隻是輸入的,有功能鍵的,

功能鍵之取反——C#計算器程式設計教學

為了實現取反,影響的面很大,但也不得不硬著頭皮弄啊。根據程式設計原則,先要進行分析。算式中出現負數很正常對吧,出現負數怎麼個樣子呢?比如-8,它在算式裡是怎麼表示的?是“(-8)”。大家有沒有想到,其中這個“-”,我們在前面的程式裡是不是一個運算子?當然是的,所以首先一個,SetOp方法要修改。其次,你們有沒

十三功能鍵之開根號——C#計算器程式設計教學

首先說明一點,這裡實現的是整個算式結果開根號,而不是輸入項數的開根號。所以,先計算,再開根號。程式碼如下: private void Square() { try {

等於之呼叫關鍵呼叫——C#計算器程式設計教學

操作集合生成方法加呼叫生成方法,還沒有真的進行等於操作。這節課就是本程式的“等於”的程式碼如何寫?先期做了很多基本功,都是圍繞它來做的基礎工作。完成了基礎工作,總體工作就容易多了,不就是再次呼叫嗎?不全對。你考慮過計算嗎?還有一個計算方法,這是核心!集合真的生成了,接著其實

Coursera Deep Learning 卷積神經網路 第二週 程式設計作業 殘差神經網路 Residual Networks

Coursera Deep Learning 第四課 卷積神經網路 第二週 程式設計作業 殘差神經網路 Residual Networks Welcome to the second assignment of this week! You will l

十五程式碼複用——C#計算器程式設計教學

新手和老手的區別之一,就是看程式碼的簡潔程度。簡潔的辦法之一就是程式碼複用。看著我前面圍繞等於寫了至少5個方法,其實這其中有方法也由另外的方法呼叫,這就達到了複用的目的。舉個例子,上節課講到的取反,它的程式碼就用到了SetCaclLists方法。我不能在caclString

第二十先乘除後加減——C#計算器程式設計教學

不少人念念不忘四則運算的運算子優先順序,而Windows7的計算器基本型也沒有實現它。 其實根據我的算式運算解決思路,其實就查詢有乘除的項,先加好(物件加),然後做加減。 程式碼修改如下: private string RunCaclLists()

C語言基礎--數組與字符串

cat ant 隨機數 打印 第一個 長度 stdin 有效 borde 1 數組 1.1 一維數組定義與使用 int array[10];//定義一個一維數組,名字叫array,一共有10個元素,每個元素都是int類型的 array[0]

Thrift 連接中斷異常處理

while循環 copy app cal 客戶端 pan all per 機制 場景 Thrift框架采用了異常處理機制,當客戶端異常斷開連接,服務端這個時候嘗試發送數據給客戶端,Thrift庫會拋出異常,導致進程中斷。這種情況是非常正常的,服務器端應該捕獲異常的發生,但是

C#程式設計基礎2:使用if語句、if-else語句、多重if語句、巢狀if語句完成的C#控制檯小程式

知識點:基本算術運算、簡單if語句、if-else語句的練習。利用語句完成簡單C#控制檯程式。 1、運用if-else語句,判斷使用者輸入的年份是否是閏年 static void Main(string[] args) { /*

C#程式設計基礎c#中的邏輯運算子、多重if語句、巢狀if語句的使用

知識點:邏輯運算子、多重if語句、巢狀if語句 1、邏輯運算子 練習1:邏輯或、邏輯與運算子的使用 本次計算機考試成績規定:筆試成績等於100分且機試成績大於等於60分,或筆試成績大於等於60分且機試成績等於100分,     輸出“成績優秀”,&

斯坦福大學-自然語言處理入門 筆記 語言模型

一、介紹N-grams 1、概率語言模型 對每個句子給出一個概率,用以判斷機器翻譯中哪個句子是最佳的選擇,拼寫校準中哪個句子可能出現錯誤。 目標:計算句子或者是一系列單詞的概率

C語言12——輸入&輸出

輸入 意味著要向程式填充一些資料。 輸入可以是以檔案的形式或從命令列中進行。 C 語言提供了一系列內建的函式來讀取給定的輸入,並根據需要填充到程式中。   輸出 意味著要在螢幕上、印表機上或任意檔案中顯示一些資料。 C 語言提供了一系列內建的函式來輸出資料到

C語言筆記 型別轉換

第四課 型別轉換 型別之間的轉換 C語言中的資料型別可以進行轉換 強制型別轉換 隱式型別轉換 強制型別轉換 強制型別轉換的語法 (Type)var_name; (Type)value; 強制型別轉換的結果 目標型別能夠容納目標值:結果不變 目標型別不能容納目標值:結果將產生截斷

:vi編輯器和c語言

vi編輯器   vi編輯器的三種模式:           命令模式:1,從命令模式切換至插入模式         &nbs

C語言基礎教學——迴圈結構之for迴圈(

C語言中的迴圈結構分為三類: 1、for()迴圈 2、while()迴圈 3、do while()迴圈 何為迴圈:程式自動重複某幾個語句 1、for()迴圈,最常用的迴圈 語法結構: for(語句1;語句2;語句3){ 迴圈體 } 語

斯坦福大學自然語言處理 語言模型(Language Modeling)筆記

一、課程介紹 斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授授課:https://class.coursera.org/nlp/ 以下是本課程的學習筆記,以課程PPT/

c++程式設計線上筆試中遇到多個輸入處理案例

1,問題描述。 洗牌在生活中十分常見,現在需要寫一個程式模擬洗牌的過程。 現在需要洗2n張牌,從上到下依次是第1張,第2張,第3張一直到第2n張。首先,我們把這2n張牌分成兩堆,左手拿著第1張到第n張(上半堆),右手拿著第n+1張到第2n張(下半堆)。接著就開始洗牌的過程,

align .com box enter body button 守護 .html radi <body> <table width="100%" border="0" cellspacing="0" cellpadding="0">