Софтуерно Инженерство
Loading...
+ Нов въпрос
IliyaVesselinov avatar IliyaVesselinov 1 Точки

2. Phonebook Upgrade

2. Phonebook Upgrade

Add functionality to the phonebook from the previous task to print all contacts ordered lexicographically when receive the command “ListAll”.

Input:

A Nakov +359888001122

A RoYaL(Ivan) 666

A Gero 5559393

A Simo 02/987665544

ListAll

END

A Nakov +359888001122

A RoYaL(Ivan) 666

A Gero 5559393

A Simo 02/987665544

ListAll

END

Здравейте!

Имам молба за следния код да бъде кригиран и постнат като работещ, като съм задал условието на задачата. Моля други решения или коментари извън молбата ми, да не бъдат давани като коментари. Искам този код, но не работи, да бъде коригиран в работещ! п.с. вероятно кодът не е дописан просто.

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication235
{
    class Program
    {
        static void Main(string[] args)
        {
            SortedDictionary<string, string> phonebook = new SortedDictionary<string, string>();

            string commandLine = Console.ReadLine();

            while (!commandLine.Equals("END"))
            {
                string[] commandArgs = commandLine.Split(' ');

                string command = commandArgs[0];

                if (command.Equals("A"))
                {
                    AddNewEntry(phonebook, commandArgs);
                }
                else if (command.Equals("S"))
                {
                    PrintEntry(phonebook, commandArgs);
                }
                else if (command.Equals("ListAll"))
                {
                    PrintAllEntries(phonebook);
                }

                commandLine = Console.ReadLine();
            }

        }

        private static void PrintAllEntries(SortedDictionary<string, string> phonebook)
        {
            List<KeyValuePair<string, string>> orderedPhonebook = phonebook.OrderBy(x => x.Value).ToList();

            foreach (var entry in orderedPhonebook)
            {
                Console.WriteLine("{0} -> {1}", entry.Key, entry.Value);
            }
        }

        private static void PrintEntry(SortedDictionary<string, string> phonebook, string[] commandArgs)
        {
            string contact = commandArgs[1];
            if (phonebook.ContainsKey(contact))
            {
                Console.WriteLine("{0} -> {1}", contact, phonebook[contact]);
            }
            else
            {
                Console.WriteLine("Contact {0} does not exist.", contact);
            }
        }

        private static void AddNewEntry(SortedDictionary<string, string> phonebook, string[] commandArgs)
        {
            string contact = commandArgs[1];
            string number = commandArgs[2];

            phonebook[contact] = number;
        }
    }
}

Тагове:
0
Technology Fundamentals 14/10/2016 14:27:19
Luko193 avatar Luko193 342 Точки

Имаш 2 грешки в кода. Първо, когато добавяш ново entry във phonebook, трябва да провериш дали съществува вече такъв ключ, който е името на контакта и ако няма да го създадеш: 

if (!phonebook.ContainsKey(contact)) {
      phonebook[contact] = string.Empty;
 }

Също така, когато принтираш контактите трябва да ги сортираш по името на контакта, а не по телефонния им номер:

 List<KeyValuePair<string, string>> orderedPhonebook = phonebook.OrderBy(x => x.Key).ToList();

Това е фикснатия код: http://pastebin.com/2Gv4xrri. Също така една препоръка, занапред, когато постваш толкова дълъг код използвай http://pastebin.com. Успех.

0
IliyaVesselinov avatar IliyaVesselinov 1 Точки

Благодаря брато! Аз тази задача специално не съм я решавал сам, а я гледах от видеото, където не е решена цялата просто ... И това беше уловката за мен, че докато зацепя че това не е цялото решене, защото съм гледал 98% от цялото решаване, но не и момента където той казва, сами да я дорешим, и останах с в впечатлението че едва ли не нещо в решенето е гъбясало. Пък то бил законът на Мърфи - да ми е гадно! Хаха! Мери още веднъж за отделеното време! 

Аз съм онлайн форма и разбирам, че това си има доста недостатъци. Първият да речем едно малко екранче, в което се взираш с часове, вместо да гледаш каквато е практиката в учебните десетилетия поне от 15 години, на проектора и да зацепваш по-добре, защото очите са основното когнитивно средство за учене в случая. И на моменти ако нямаш втори компютър (или поне втори монитор), какъвто имам в София, но не и във Варна, за да пуснеш на единят решението, а на другият VisualStudio, и се стига до забатачване в писането на кода. Но решение има, стига да иска човек. Просто си вземам и тука втори монитор. Накратко исках да кажа, че щеше да е добре да има целят курс, респективно целите курсове присъствено поне във Варна, Пловдив, Бургас и още два-три града, но уви, държавата не помага по никакъв начин явно на такива начинания, защото както се казва, колкото е по-прост и -беден народа, толкова по-леско се управлява и толкова по-лесно му се вземат юредическите права. Фактът е, българинът става с всяко поколение два пъти по-беден ... п.с. съжалявам че ва затормозявам с простоти, и още повече това не зависи от тем или мен. Просто искам промяна.  Аз съм от хората, които един ден твърдо са решили да изкарат примерно 10 000 лв. от джоба си, за да направят присъствента форма на обучение възможна и на други места в БГ.

 

1
14/10/2016 15:51:09