久久综合丝袜日本网手机版,日韩欧美中文字幕在线三区,亚洲精品国产品国语在线,极品在线观看视频婷婷

      • 一道.NET程序員面試題的遐想

        時(shí)間:2022-07-13 14:41:20 面試 我要投稿
        • 相關(guān)推薦

        關(guān)于一道.NET程序員面試題的遐想

        前幾天,同學(xué)問(wèn)了我一道程序員的面試題,題目是 “統(tǒng)計(jì)用戶輸入的一串?dāng)?shù)字中每個(gè)數(shù)字出現(xiàn)的次數(shù)”。

        關(guān)于一道.NET程序員面試題的遐想

        當(dāng)時(shí)看到這個(gè)題目,我的第一想法就是:

        1.先判斷用戶輸入的是否是數(shù)字,用if-else語(yǔ)句來(lái)判斷;

        2.將用戶輸入的數(shù)字字符串轉(zhuǎn)換成char數(shù)組;

        3.用for循環(huán)遍歷每個(gè)字符,根據(jù)switch-case語(yǔ)句來(lái)逐一判斷。

        4.再建立一個(gè)int數(shù)組來(lái)接收判斷后的結(jié)果,最后for循環(huán)輸出。

        該方法的解題代碼如下:

        View Code

        classprogram

        {

        staticvoidMain(string[]args)

        {

        //計(jì)算用戶輸入的一串?dāng)?shù)字中每個(gè)數(shù)字出現(xiàn)的次數(shù)

        Console.WriteLine("請(qǐng)輸入一串?dāng)?shù)字");

        stringstr=Console.ReadLine();

        //將字符串轉(zhuǎn)換為字符數(shù)組

        char[]chnum=str.ToCharArray();

        #region判斷用戶輸入的是否是數(shù)字

        for(inti=0;i

        {//判斷每一個(gè)字符是否是數(shù)字通過(guò)char的方法來(lái)判斷

        if(!char.IsNumber(chnum[i]))

        {

        Console.WriteLine("您的輸入有誤,請(qǐng)輸入數(shù)字");

        Console.ReadKey();

        return;

        }

        }

        #endregion

        //定義一個(gè)新的數(shù)組來(lái)保存計(jì)數(shù)

        int[]count=newint[9];

        #regionfor循環(huán)遍歷

        //for循環(huán)遍歷

        for(inti=0;i{

        switch(chnum[i])

        {

        case1:

        count[0]++;

        break;

        case2:

        count[1]++;

        break;

        case3:

        count[2]++;

        break;

        case4:

        count[3]++;

        break;

        case5:

        count[4]++;

        break;

        case6:

        count[5]++;

        break;

        case7:

        count[6]++;

        break;

        case8:

        count[7]++;

        break;

        case9:

        count[8]++;

        break;

        }

        }

        #endregion

        #region循環(huán)輸出

        for(inti=0;i{

        Console.WriteLine("含有的數(shù)字{0}的個(gè)數(shù)是:{1}",i+1,count[i]);

        }

        #endregion

        Console.ReadKey();

        }

        }

        運(yùn)行效果如下:

        不過(guò),這種方法有兩個(gè)缺點(diǎn)就是,如果用戶輸入的不是數(shù)字(如字母或符號(hào)等),程序會(huì)提示錯(cuò)誤,并退出;再者,也會(huì)統(tǒng)計(jì)出用戶沒(méi)有輸入過(guò)的數(shù)字的個(gè)數(shù)為0個(gè),如果某些時(shí)候不想知道沒(méi)有輸入的數(shù)字的個(gè)數(shù),這種解法很不合適,而且代碼修改起來(lái)也很復(fù)雜。

        新解法: 泛型集合

        碰巧這幾天接觸了泛型集合,沒(méi)想到用Dictionary來(lái)解這道題是那么的簡(jiǎn)單。

        代碼如下:

        View Code

        classprogram

        {

        staticvoidMain(string[]args)

        {

        Console.WriteLine("請(qǐng)輸入數(shù)字");

        stringnumbers=Console.ReadLine();

        //創(chuàng)建集合鍵為數(shù)字char類型值為每個(gè)數(shù)字出現(xiàn)的次數(shù)int類型

        Dictionarydict=newDictionary();

        //將數(shù)字字符串轉(zhuǎn)換為單個(gè)字符數(shù)組

        char[]chs=numbers.ToCharArray();

        for(inti=0;i{

        //判斷是否是數(shù)字用到char的isnumber方法

        if(char.IsNumber(chs[i]))

        {

        //如果鍵中已含有該數(shù)字,則將其對(duì)應(yīng)的值+1,否則不存在,加入鍵中值為1

        if(!dict.ContainsKey(chs[i]))

        {

        //將每個(gè)數(shù)字字符作為鍵存入鍵值對(duì)中,值初始為1

        dict.Add(chs[i],1);

        }

        else

        {

        //值+1

        dict[chs[i]]++;

        }

        }

        }

        //循環(huán)遍歷鍵值對(duì)輸出

        foreach(KeyValuepairitemindict)

        {

        Console.WriteLine("數(shù)字:{0}出現(xiàn)了{(lán)1}次。",item.Key,item.Value);

        }

        Console.ReadKey();

        復(fù)制代碼

        可見(jiàn),簡(jiǎn)單的幾行代碼就解決了。

        而且,這種解法完全解決了上面遇到的兩個(gè)問(wèn)題。

        我覺(jué)得這個(gè)應(yīng)該就是面試官想要的效果吧。(汗。。。不知道我那位同學(xué)的面試情況怎么樣。。。)

        寫(xiě)到這里,我又想到了見(jiàn)過(guò)的另一道面試題:“計(jì)算字符串中每種字符出現(xiàn)的次數(shù)”。

        這要用我開(kāi)始想到的那種思路來(lái)解得話,我豈不是要寫(xiě)26個(gè)case語(yǔ)句來(lái)判斷嗎,汗。。。。不知道面試官要是看到這么多代碼豈不是會(huì)當(dāng)場(chǎng)走人。。。顯然這不是最好的解題辦法。

        還是用泛型集合來(lái)解:

        View Code

        classprogram

        {

        staticvoidMain(string[]args)

        {

        //計(jì)算字符串中每種字符出現(xiàn)的次數(shù)(面試題)。

        //“WelcometoChina,beijing”,

        //不區(qū)分大小寫(xiě),打印“W2”“e2”“o3”……

        /*思路:1將字符串都轉(zhuǎn)換為小寫(xiě)形式,否則大小寫(xiě)會(huì)算各一個(gè)

        *2以字符為鍵每個(gè)字符出現(xiàn)的次數(shù)為值建立Dictionary泛型集合

        *3將字符串轉(zhuǎn)換為字符數(shù)組

        *4循環(huán)遍歷每個(gè)字符,加入集合中作為鍵,其對(duì)應(yīng)的值初始為1

        *5在加入鍵之前做一個(gè)判斷,由于集合中的鍵不能重復(fù),所以判斷如果鍵中已經(jīng)還有該字符

        *則不再加入該鍵,只把他的值+1

        *6去除字符串中的空格char.isLetter()如果是字母,進(jìn)行操作5

        *7總結(jié):主要是泛型集合的應(yīng)用

        */

        //例句:

        //stringsentences="WelcometoChina,beijing";

        Console.WriteLine("請(qǐng)輸入一段字母");

        stringsentences=Console.ReadLine();

        //將字符串都轉(zhuǎn)換為小寫(xiě)形式

        sentences=sentences.ToLower();

        //建立泛型集合

        Dictionarydict=newDictionary();

        //將字符串變成字符數(shù)組

        char[]chs=sentences.ToCharArray();

        //遍歷每一個(gè)字符

        for(inti=0;i{

        //通過(guò)char的方法判斷是否為字母,如果為字母,則進(jìn)行下面的操作,

        //否則不操作

        if(char.IsLetter(chs[i]))

        {

        //如果不包含該鍵,則加入集合中

        if(!dict.ContainsKey(chs[i]))

        {

        //將每個(gè)字符加入集合中對(duì)應(yīng)鍵,其值初始為1

        dict.Add(chs[i],1);

        }

        else

        {

        //否則,包含該鍵,只將其對(duì)應(yīng)的值+1即可值的類型為int

        //dict[chs[i]]=dict[chs[i]]+1;

        dict[chs[i]]++;

        }

        }

        }

        //循環(huán)遍歷輸出集合中的鍵值

        foreach(KeyValuepairkvindict)

        {

        Console.WriteLine("字母:{0}出現(xiàn)了{(lán)1}次。",kv.Key,kv.Value);

        }

        Console.ReadKey();

        }

        }

        同樣,代碼很簡(jiǎn)單:

        這時(shí),我又突發(fā)奇想想到了另一種情況:

        用戶輸入一串字母和數(shù)字的混合字符串如“ddeieiei4954jjfjdji383ddjeuut3003k”

        統(tǒng)計(jì)出每個(gè)數(shù)字或字母出現(xiàn)的次數(shù),且數(shù)字在前,字母在后 ,數(shù)字和字母內(nèi)沒(méi)有順序要求

        如 數(shù)字 4 出現(xiàn)了 2次

        數(shù)字 3 出現(xiàn)了 4次

        .......

        ........

        字母 d 出現(xiàn)了 5次

        ...........

        當(dāng)然,最簡(jiǎn)單的還是用泛型集合來(lái)解了。。。。

        最后來(lái)個(gè)總結(jié)吧:

        個(gè)人認(rèn)為,遇到一個(gè)新的問(wèn)題的時(shí)候,關(guān)鍵是思路,把思路一步一步理順了,就像我們老師說(shuō)的那樣,知道你要干什么,想好怎樣去做,最后再去寫(xiě)代碼。不要一上來(lái)就敲代碼,思路都沒(méi)搞清楚呢,最后肯定是問(wèn)題多多。

        希望這篇文章可以給像我這樣正在找工作的應(yīng)屆生一些小小的幫助吧!

        (突然覺(jué)得在大學(xué)里學(xué)的那些知識(shí)都太簡(jiǎn)單了,而且太深了也不講。找工作時(shí)真的很無(wú)奈啊!!!)


        【一道.NET程序員面試題的遐想】相關(guān)文章:

        2011最新asp.net面試題與答案07-11

        一道騰訊的面試題07-09

        程序員面試題精選07-12

        一道Java面試題,題目如下07-11

        女本 計(jì)算機(jī)專業(yè)想做net程序員難不難?07-10

        入門(mén)級(jí)PHP程序員面試題07-09

        一道很不錯(cuò)的人力資源面試題07-11

        誰(shuí)有近幾年華為和中興公司的Java程序員面試題07-11

        WAP網(wǎng)絡(luò)與NET網(wǎng)絡(luò)的區(qū)別于定義!07-10

        京東為什么在用.net07-11