Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

g.antonov avatar g.antonov 20 Точки

[Homework] Advanced C# - Arrays, Lists, Stacks, Queues - Problem 4 - Bad Code vs Good Code

Днес реших задача 4, но решението ми се стори прекалено сложно като код и реших да го преработя. Изненадващо, отне ми 5 минути и се получи толкова по-добре, че реших да постна двата варианта като демонстрация колко голяма разлика може да има от код до код, макар и крайният резултат да е същият - поне примерите дадени във файла с домашното работят еднакво и с двата варианта.

Грозно решение:
http://pastebin.com/2kf8tBqu

Хубаво решение:
http://pastebin.com/GpXwuPqK

 

Поздрави :)

3
C# Advanced 17/09/2015 13:26:42
Gabriela_banova avatar Gabriela_banova 12 Точки

На "хубавото решение " на мен ми дава IndexOutsideTheBoundsOfTheArray?:)

0
18/09/2015 20:31:03
Gabbs avatar Gabbs 80 Точки

Какъв input му подаваш?

Не би трябвало да дава такава грешка.

0
18/09/2015 22:48:25
Gabriela_banova avatar Gabriela_banova 12 Точки

ami tezi ot domashnoto- hi yes yes yes bye

 string[] input = Console.ReadLine().Split(' ').ToArray();

           for (int i =0;i< input.Length; i++)
            {
                Console.Write(input[i] + " ");
                if(input[i] == input[i + 1])
                {
                    Console.Write(" ");
                }
                else
                {
                    Console.WriteLine();
                }
                
                

             }

Moje da imam greshka nqkude,no ne q vijdam:)

0
19/09/2015 11:56:00
Gabbs avatar Gabbs 80 Точки

g.antonov има един допълнителен if( i < inputElements.Length-1), който проверява дали цикълът е стигнал до последния елемент. При теб я няма тази проверка и когато цикълът стигне до последния елемент, се опитва да изчисли input[i+1], което вече е IndexOutsideTheBoundsOfTheArray.

1
Gabriela_banova avatar Gabriela_banova 12 Точки

da,da razbrah,bqh se zabludila ,che probvah i s tazi proverka i pak taka stavashe ,no qvno sum se oburkala neshto.mersi:)

0
Gabriela_banova avatar Gabriela_banova 12 Точки

tq 5-ta zadacha e na sushtiq princip ,vkarvam i tova uslovie v if-a (if i < input.Lenght-1) obache pak mi dava exeption i tozi put poneje e s intove ,poslednoto chislo mi go reje v outputa

int [] input = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            for (int i =0;i < input.Length; i++)
            {
                int currentNumber =input[i];
                int nextNumber = input[i + 1];
                Console.Write(input[i] + " ");
                if (i < input.Length - 1 && currentNumber < nextNumber)
                {
                    Console.Write(" ");
                }
                else
                {
                    Console.WriteLine();
                }

            }

0
Gabbs avatar Gabbs 80 Точки

В този случай не е добра идея да имаш "i < input.Length - 1" && "currentNumber < nextNumber" в същия if. Така написано, когато цикълът стигне до input[input.Length - 2] (т.е. предпоследния елемент), ще изпринтира нов ред, независимо дали input[input.Length - 1] (т.е. последния елемент) е по-голям или по-малък.

Примерно, може да стане: http://pastebin.com/3cTDewT8

По този начин направено, трябва "i < input.Length - 1" (т.е. for цикълът стига само до input[input.Length - 2] (предпоследния елемент)), иначе ще се счупи с IndexOutsideTheBoundsOfTheArray.

Двете задачи са много подобни, но има една голяма разлика - в единия случай търсиш еднаквите числа/букви, в другия - по-големи/по-малки.

0
19/09/2015 15:09:35
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.