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

Въпрос относно използването на Exceptions в Judge системата (OOP Introduction - Encapsulation and Validation)

Здравейте, решавам задача 04. Pizza Calories от OOP Introduction - Encapsulation and Validation, и бих искал да попитам защо Judge системата ми връща грешка, когато използвам Exception, като в условието ИЗРИЧНО е казано, че трябва да се хвърли Exception - "throw an exception with the message 'Number of toppings should be in range [0..10].' ". При третия нулев тест на тази задача ми казва, че очакваният ИЗХОД трябва да бъде "Number of toppings should be in range [0..10].", а не Exception. Ето ми го кода: 

Toppings - https://pastebin.com/1gTeKdwf

Dough - https://pastebin.com/N7PFS6NZ

Pizza - https://pastebin.com/j7nzdWHf

Program - https://pastebin.com/b5W4P9EP

 

Благодаря предварително!

 

EDIT: Реших задачата със 100/100 като използвах Console.WriteLine() за да отпечатам очаквания изход, и System.Environment.Exit(1) за да спра изпълнението на програмата. Ако това наистина е начинът, по който програмата трябва да се реши, тогава ЗАЩО ни е казано да хвърлим Exception? Благодаря.

0
C# DB Fundamentals 01/11/2017 15:38:27
ambiorix avatar ambiorix 641 Точки
Best Answer

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

Няма нужда да спираш програмата ръчно, а можеш пак да сложиш exception в Pizza класа. Алгоритъмът на високо ниво е следният:

1. четеш вход от конзолата;

2. опитваш да създадеш обект с входните данни(тесто, топинги и т.н.)

2.1 ако при създаването на някой обект хвърлиш exception, то той трябва да бъде хванат (try{} catch(){}) и изписан на конзолата, което приключва програмата

3. при успешно създаване на цялата пица - принтираш информацията за калориите ѝ и приключваш програмата

Относно примерен output 3 - грешен е(трябва да дава "Invalid type of dough."), защото задачата е модифицирана от същата такава, но за OOP Basics курса. Докладвах грешката през системата за материалите.

Ето моята имплементация за допълнително разяснение: https://github.com/gaydov/Softuni-DB-Advanced/tree/master/2EncapsulationAndValidation/PizzaCalories

0
01/11/2017 19:40:44
vaskoleon avatar vaskoleon 23 Точки

Не бях разбрал, че Exception-ите трябва да бъдат хванати; не си спомням да съм виждал такава инструкция в задачите. Благодаря!

0
01/11/2017 20:45:53
ambiorix avatar ambiorix 641 Точки

Това, че exception-ите трябва да бъдат хванати е генерален похват в програмирането така че го имай предвид при всички задачи. Идеята е грешката да бъде уловена и обработена по някакъв начин - показана на конзолата, върната на потребителя като променен текст(например "Не е въведено първо име" говори повече отколкото "Object reference not set to an instance of an object"), пратена на друга програма която да прави нещо за да я поправи и т.н.

0