小菜編程成長(zhǎng)記(一 面試受挫——代碼無錯(cuò)就是好?)第1/3頁(yè)
到了人家單位,前臺(tái)小姐給了他一份題目,上面寫著,“請(qǐng)用C++、Java、C#或VB.NET任意一種面向?qū)ο笳Z(yǔ)言實(shí)現(xiàn)一個(gè)計(jì)算器控制臺(tái)程序,要求輸入兩個(gè)數(shù)和運(yùn)算符號(hào),得到結(jié)果?!?
小菜一看,這個(gè)還不簡(jiǎn)單,三下五除二,10分鐘不到,小菜寫完了,感覺也沒錯(cuò)誤。交卷后,單位說一周內(nèi)等通知吧。于是小菜只得耐心等待??墒前雮€(gè)月過去了,什么消息也沒有,小菜很納悶,我的代碼實(shí)現(xiàn)了呀,為什么不給我機(jī)會(huì)呢。
小菜找到工作三年的師哥大鳥,請(qǐng)教原因,大鳥問了題目和了解了小菜代碼的細(xì)節(jié)以后,哈哈大笑,說道:“小菜呀小菜,你上當(dāng)了,人家單位出題的意思,你完全都沒明白,當(dāng)然不會(huì)再聯(lián)系你了”。
小菜說:“我的代碼有錯(cuò)嗎?單位題目不就是要我實(shí)現(xiàn)一個(gè)計(jì)算器的代碼嗎,我這樣寫有什么問題?!?BR>
class Program
{
static void Main(string[] args)
{
Console.Write("請(qǐng)輸入數(shù)字A:");
string A = Console.ReadLine();
Console.Write("請(qǐng)選擇運(yùn)算符號(hào)(+、-、*、/):");
string B = Console.ReadLine();
Console.Write("請(qǐng)輸入數(shù)字B:");
string C = Console.ReadLine();
string D = "";
if (B == "+")
D = Convert.ToString(Convert.ToDouble(A) + Convert.ToDouble(C));
if (B == "-")
D = Convert.ToString(Convert.ToDouble(A) - Convert.ToDouble(C));
if (B == "*")
D = Convert.ToString(Convert.ToDouble(A) * Convert.ToDouble(C));
if (O == "/")
D = Convert.ToString(Convert.ToDouble(A) / Convert.ToDouble(C));
Console.WriteLine("結(jié)果是:" + D);
}
}
小菜的代碼有什么問題呢?
二 代碼規(guī)范、重構(gòu)
大鳥說:“且先不說出題人的意思,單就你現(xiàn)在的代碼,就有很多不足的地方需要改進(jìn)。比如變量命名,你的命名就是ABCD,變量不帶有任何具體含義,這是非常不規(guī)范的;判斷分支,你這樣的寫法,意味著每個(gè)條件都要做判斷,等于計(jì)算機(jī)做了三次無用功;數(shù)據(jù)輸入有效性判斷等,如果用戶輸入的是字符符號(hào)而不是數(shù)字怎么辦?如果除數(shù)時(shí),客戶輸入了0怎么辦?這些都是可以改進(jìn)的地方?!?
“哦,說得沒錯(cuò),這個(gè)我以前聽老師說過,可是從來沒有在意過,我馬上改,改完再給你看看?!?BR>
class Program
{
static void Main(string[] args)
{
try
{
Console.Write("請(qǐng)輸入數(shù)字A:");
string strNumberA = Console.ReadLine();
Console.Write("請(qǐng)選擇運(yùn)算符號(hào)(+、-、*、/):");
string strOperate = Console.ReadLine();
Console.Write("請(qǐng)輸入數(shù)字B:");
string strNumberB = Console.ReadLine();
string strResult = "";
switch (strOperate)
{
case "+":
strResult = Convert.ToString(Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB));
break;
case "-":
strResult = Convert.ToString(Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB));
break;
case "*":
strResult = Convert.ToString(Convert.ToDouble(strNumberA) * Convert.ToDouble(strNumberB));
break;
case "/":
if (strNumberB != "0")
strResult = Convert.ToString(Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB));
else
strResult = "除數(shù)不能為0";
break;
}
Console.WriteLine("結(jié)果是:" + strResult);
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("您的輸入有錯(cuò):" + ex.Message);
}
}
}
大鳥:“吼吼,不錯(cuò),不錯(cuò),改得很快嗎?至在目前代碼來說,實(shí)現(xiàn)計(jì)算器是沒有問題了,但這樣寫出的代碼是否合出題人的意思呢?”
小菜:“你的意思是面向?qū)ο螅俊?br>
大鳥:“哈,小菜非小菜也!”
相關(guān)文章
C# DataTable 轉(zhuǎn)換為 實(shí)體類對(duì)象實(shí)例
如果你的實(shí)體類與數(shù)據(jù)庫(kù)表是完全一致的。上代碼:2013-04-04解析C#設(shè)計(jì)模式編程中適配器模式的實(shí)現(xiàn)
這篇文章主要介紹了C#設(shè)計(jì)模式編程中適配器模式的實(shí)現(xiàn),分別舉了類的對(duì)象適配器與對(duì)象的適配器模式的例子,需要的朋友可以參考下2016-02-02提權(quán)函數(shù)之RtlAdjustPrivilege()使用說明
RtlAdjustPrivilege() 這玩意是在 NTDLL.DLL 里的一個(gè)不為人知的函數(shù),MS沒有公開,原因就是這玩意實(shí)在是太NB了,以至于不需要任何其他函數(shù)的幫助,僅憑這一個(gè)函數(shù)就可以獲得進(jìn)程ACL的任意權(quán)限!2011-06-06C#使用Dns類實(shí)現(xiàn)查詢主機(jī)名對(duì)應(yīng)IP地址
C#中的Dns類能夠與默認(rèn)的DNS服務(wù)器進(jìn)行通信,以檢索IP地址,這篇文章主要介紹了C#如何使用Dns類解析出主機(jī)對(duì)應(yīng)的IP地址信息,需要的可以參考下2024-02-02C#隨機(jī)設(shè)置900-1100毫秒延遲的方法
這篇文章主要介紹了C#隨機(jī)設(shè)置900-1100毫秒延遲的方法,涉及C#中Thread.Sleep方法的使用技巧,需要的朋友可以參考下2015-04-04深入分析C#中WinForm控件之Dock順序調(diào)整的詳解
本篇文章是對(duì)C#中WinForm控件之Dock順序調(diào)整進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#中DataSet、DataTable、DataRow數(shù)據(jù)的復(fù)制方法
這篇文章介紹了C#中DataSet、DataTable、DataRow數(shù)據(jù)的復(fù)制方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07結(jié)合.net框架在C#派生類中觸發(fā)基類事件及實(shí)現(xiàn)接口事件
這篇文章主要介紹了結(jié)合.net框架在C#派生類中觸發(fā)基類事件及實(shí)現(xiàn)接口事件,示例的事件編程中包括接口和類的繼承等面向?qū)ο蟮幕A(chǔ)知識(shí),需要的朋友可以參考下2016-02-02