[Homework] Advanced C# - Arrays, Lists, Stacks, Queues - Problem 4 - Bad Code vs Good Code
Днес реших задача 4, но решението ми се стори прекалено сложно като код и реших да го преработя. Изненадващо, отне ми 5 минути и се получи толкова по-добре, че реших да постна двата варианта като демонстрация колко голяма разлика може да има от код до код, макар и крайният резултат да е същият - поне примерите дадени във файла с домашното работят еднакво и с двата варианта.
Грозно решение:
http://pastebin.com/2kf8tBqu
Хубаво решение:
http://pastebin.com/GpXwuPqK
Поздрави :)
Какъв input му подаваш?
Не би трябвало да дава такава грешка.
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:)
g.antonov има един допълнителен if( i < inputElements.Length-1), който проверява дали цикълът е стигнал до последния елемент. При теб я няма тази проверка и когато цикълът стигне до последния елемент, се опитва да изчисли input[i+1], което вече е IndexOutsideTheBoundsOfTheArray.
da,da razbrah,bqh se zabludila ,che probvah i s tazi proverka i pak taka stavashe ,no qvno sum se oburkala neshto.mersi:)
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();
}
}
В този случай не е добра идея да имаш "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.
Двете задачи са много подобни, но има една голяма разлика - в единия случай търсиш еднаквите числа/букви, в другия - по-големи/по-малки.