Loading...
MilenaSl avatar MilenaSl 161 Точки

[Exercises] C# OOP Basics - Inheritance - Problem {4} - Online Radio Database

75/100, тестове 4 и 6 дават неправилни отговори -> https://github.com/MilenaPetkanova/csharp-oop-basics-softuni/tree/master/0402-Inheritance-Exercises/0404-Online-Radio-Database

За разлика от всички други решения, които разгледах, моето е с валидация в самия клас Song, но не смятам, че е възможно това да е проблемът.

Идеи за тестове 4 и 6 или грешки в кода ми?

 

0
C# OOP Basics
MilenaSl:
Решението е редактирано за 100/100
KrIsKa7a avatar KrIsKa7a 29 Точки

Първо самата идея на задачата е да си направиш валидацията в клас Song това ти е напълно вярно. Но идеята е да направиш йерархия от Exceptions, които да хвърляш при всяка различна грешка. Валидацията би било редно да се извърши в setters на property-тата, а не в отделен метод освен ако не е толкова дълга, че да налага това. Най вероятно имаш грешка в последователността на проверката за грешките, която трябва да се извърши от името на изпълнителя, после името на песента и накрая форматът на дължината на песента. Още повече те могат да ти подадат песен с различен брой на аргументите, за което ти проверка не правиш никъде. Ти направо присвояваш на променливи и правиш песен. Ами ако не съществува такова място в масива и ти даде OutOfBoundsOfTheArray Exception или при int.Parse, ако ти пуснат стринг и ти даде FormatException, като ги уловиш какво съобщение ще изпишеш? Надявам се отговорът ми да е бил достатъчно изчерпателен, но ти пускам и моето решение да го погледнеш ако желаеш:

Съжалявам че не съм премахнал папките bin и obj, но просто нямах време.

Поздрави!

1
MilenaSl avatar MilenaSl 161 Точки

Благодаря за отговора! Все пак смятам да отделя Exceptions в класове, вместо в константни променливи.

Относно последователността - изнасяйки проверките в метод с if и else if се гаратира, че ще се изпълнят точно в реда, който условието изисква. Единствената проверка, която не е направена в ValidateSong(), е "Invalid song.", но тя е изнесена още в Main метода. Покрива се и случая с подаване на по-малко аргименти, и случая с невъзможността да се изпълни int.Parse. (ред 31 - ред 41)

            catch (Exception ex)
            {
                if (ex is ArgumentException)
                    Console.WriteLine(ex.Message);
                else if (ex is FormatException || ex is IndexOutOfRangeException)
                    Console.WriteLine("Invalid song.");
            }

 

 

0
KrIsKa7a avatar KrIsKa7a 29 Точки

Да покриват се съгласен съм. Трябва да изписваш Invalid song!, ако някой аргумент излезе извън рамките на масива. Но доколкото помня условието ако не се Parse-нат към число тогава имаш InvalidSongLenghtException. Тоест първо трябва да се подсигуриш че всички аргументи съществуват, а след това да провериш дали формата на времетраенето се Parse-ва успешно към число. Можеш да го видиш в моя код. Защото ако ти подадат нещо като ArtistName;SongName:asd:asd при теб ще се изпише InvalidSong понеже ще гръмне при Parse, а според условието колкото и странно да ти се струва трябва да се изпише InvalidSongLenghtException-a. Може би това е грешката. 

Още повече забелязвам, че си вкарала проверка ако минутите са повече от 14, а секундите са валидни да изписваш InvalidSongLenghtException, което мисля че не е вярно, защото това е InvalidSongMinutesException. InvalidSongLenght аз го изписвам само ако имам неправилен формат.

1
01/03/2018 09:44:54
MilenaSl avatar MilenaSl 161 Точки

Ясно! Тази част на условието ме затрудни и очевидно не я бях разбрала правилно. Ще преправя логиката.

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