今天,我寫了一個讀取整數的函數,以下:javascript
static int ReadInt(){ int inputNum; bool IsNumber = false; do { Console.WriteLine("請輸入一個整數"); try { inputNum = Convert.ToInt32(Console.ReadLine()); IsNumber = true; return inputNum; } catch { Console.WriteLine("您的輸入有誤"); } } while (IsNumber==false); }
結果編譯錯誤,錯誤列表顯示:並不是全部代碼路徑都有返回值。
就這樣一個小小的問題就將我給困住了。雖然我懂得存在代碼執行流程這麼回事(控制流),可是寫代碼的時候就是聯繫不上理論知識,理所固然得忽略基礎知識。最後咱們家何同窗告訴:程序中 當執行到try{IsNuber=true;}時候,就跳出循環,沒有執行return語句。因此函數就沒有返回值。我這才明白過來,我怎麼就沒想過程序的執行流程呢?因而,我就改了下代碼:html
static int ReadInt(){ int inputNum; bool IsNumber = false; do { Console.WriteLine("請輸入一個整數"); try { inputNum = Convert.ToInt32(Console.ReadLine()); IsNumber = true; } catch { Console.WriteLine("您的輸入有誤"); } } while (IsNumber==false); return inputNum; }
結果編譯又有錯誤,錯誤列表爲:使用了爲賦值的局部變量「inputNum」。我又成了丈二的和尚摸不着頭腦。認爲,明明inputNum變量在try裏賦值了,怎麼會沒賦值呢?最後終於頓悟:如果咱們輸入一個非整數,程序會跳過Try語句,直接執行catch子句,這時候,inputNum就沒有被賦值了。因此我將代碼改爲了:java
static int ReadInt(){ int inputNum=0; bool IsNumber = false; do { Console.WriteLine("請輸入一個整數"); try { inputNum = Convert.ToInt32(Console.ReadLine()); IsNumber = true; } catch { Console.WriteLine("您的輸入有誤"); } } while (IsNumber==false); return inputNum; }
那此次就對了。
那其實更簡潔的代碼是:程序員
static int ReadInt(){ do { Console.WriteLine("請輸入一個整數"); try { int inputNum = Convert.ToInt32(Console.ReadLine()); return inputNum; } catch { Console.WriteLine("您的輸入有誤"); } } while (true); }
從此次的錯誤當中,我學到了寫代碼以前要根據咱們所須要實現的功能,設計好代碼實現的流程。必須清楚代碼的執行流程。不能沒有步驟,籠統地將代碼放在一塊,而不去理會事情的前後順序。
(題外話:本人自學.Net開發技術,學習的大綱是以傳智播客的網上視頻教程爲主,以及《headFires》等書籍爲輔。整個教程從c#基礎、面向對象編程、wpf、數據綁定和數據庫基礎、ADO.Net、html、javascript、JQuery、Ajax、ASP.Net都基本學完,並進行了總結和梳理。但最近找工做,簡歷都石沉大海,有去那麼兩三家公司面試,多是由於項目經驗欠缺,被拒了。後來去申請了黑馬程序員培訓班,現流程還未走完。在黑馬羣裏,經過與他人交流,我發現我有一些重點知識有待增強,並且《c#基礎知識增強》我沒有學到過,由於以前不知道有渠道能夠下載到,因此委託,接口,泛型等等都是經過看書來學習的,可是書本的知識主要偏重概念。很高興最近下載到了《c#基礎知識增強》視頻。今天已經開始學習。以上的這個簡單函數,其實以前在學習c#基礎課程的時候,也是本身已經完成了的一個做業,但其實並無透徹掌握基礎,只是馬馬虎虎完成了做業,我想所以,留下了很多模糊問題吧。對此深感慚愧,又由於只是學過一遍,後期的課程當中講解的知識點其實涉及的這方面的編程並很少,再加上沒什麼項目經驗,因此現階段算是對.Net開發有個系統全面的瞭解而已,並無深刻。因此任重而道遠那。)面試
附圖1: 數據庫
附圖2:編程