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

C# OOP - юни 2019, Encapsulation - Exercise, 04. Pizza Calories

Здравейте колеги,

Пак забих, моля който може да помага...

Не ми минават тест 5 (runtime error) и тест 13 (грешен отговор), пробвах всичко дадено като предложения в старите теми за тази задача но уви - нищо.

Условието тук:

Мойте класове:

Dough class

Ingredient class

Topping class

Pizza class

Program class (Main)

 

0
C# OOP Basics
nickwork avatar nickwork 132 Точки

Ако искаш разгледай моето решение...може да ти даде някакви идеи...иначе аз погледах кода ти, но начина по който е написан не много ок..като съвет не е добра идея да използваш switch case в констуктора (даже ако ти трябва някой път по добре направи метод и викай него, но в конструктора без ифове, суичове и т.н.т), аз лично съм го решил този проблем с речници, но като идея може да стане и с enum... 

https://easyupload.io/s23ej7

0
markovood avatar markovood 10 Точки

Може ли малко по конкретно защо 

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

Съгласен съм, че заради switch-овете конструктора като код става по дълъг и е добра идея да се изнесат в отделен метод(за по добра структурираност), но като функционалност не виждам причина да се избягват "ифове, суичове и т.н." в конструктора, когато това е оправдано.В случая е оправдано, понеже определянето на modifier полето се случва при създаването на обекта и ЗАВИСИ от определени характеристики които не са ясни до този момент а се получават при създаване на обекта. Все пак конструктора по дефиниция отговаря за създаване на обекта и СЕТВАНЕ НА ПЪРВОНАЧАЛНИ СТОЙНОСТИ НА ПОЛЕТАТА МУ, сиреч всички променливи в класа се инициализират със стойности или зададени отвън или дефолтни за конкретния тип. В конкретния случай суича е в конструктора тъй като първоначалната стойност на modifier зависи от дадени обстоятелства.

0
markovood avatar markovood 10 Точки

За архива споделям че си открих грешката на тест 13, а именно че в мейна правя лист от топинги и при команда за край минавам през него и добавям всички топинги на пицата след което я печатам.Правилното явно е още след създаването на топинга да се добавя на пицата. така при команда за край само печатаме. Продължавам да търся решение за тест 5.

0
markovood avatar markovood 10 Точки

За архива споделям че намерих проблема и с тест 5, а именно разрешено е името на пицата да бъде всякакъв white space с изключение на празен стринг или null.

При мене, при валидацията на името в класа Pizza, проверявам string.IsNullOrWhiteSpace(value) и от там идва веднъж runtime error-а, а на второ място идва от това че при четене на името в Main() при .Split() използвам StringSplitOptions.RemoveEmptyEntries и  по този начин премахвам празните аргументи при сплит операцията, а име от дори само един white space е напълно валидно тъй като по условие е дадено:

The name of the pizza should not be an empty string.In addition, it should not be longer than 15 symbols. If it does not fit, throw an exception...

"   " != ""  и " " != string.Empty

0