Loading...
SvilenPavlov avatar SvilenPavlov 11 Точки

Advanced Loop 11.Въвеждане на четно число (с обработка на грешен вход)

Здравейте, пичове. Имам два въпроса за тази задача.http://pastebin.com/CrqRLWEi -това ми е кода. 
Първо - как да овладея ексепшъни, за по-големи от инт числа? Ползвам catch (FormatException) ,което върши работа за стринг, ама май не върши за по-големи числа. И второ, при трето въвеждане на нецяло число или стринг ми дава грешка. (System.FormatException: Input string was not in a correct format) Чудно защо като първите два пъти си влиза в изключението и си казва, че е грешен инпута? Какво е различно третия път?

0
Programming Basics
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Трябва всичките проверки да са ти в while-цикъла. В твоя код проверяваш формата само при първия опит, тъй като try-catch за FormatException не ти е в цикъла.

По мое мнение, за тази задача изобщо нямаш нужда от такова структуриране - става само с TryParse и while-цикъл.

Ето примерно решение: http://pastebin.com/zupa7w9X

В него съм поставил TryParse (което проверява дали въведеното число е в точния формат и се събира в променливата, а после връща true/false и самото число (ако е успешно Parse-ването) ). Поставена е и проверка, дали числото е четно. Ако има нещо неясно, ще се радвам да го обясня.

Успех със задачата!

0
SvilenPavlov avatar SvilenPavlov 11 Точки

Всъщност, имам две проверки за изключения и само първата е извън цикъла. Втората е вътре. Това е неефективно знам, но така и не видях в кода ти разграничение между нечетно число и невалидно число. В условието на задачата влиза това разграничение и джъджа проверява за различните случаи. Съчетал си двете условия и даваш един и същи резултат, което не върши работа. Това, което ми помогна обаче е, че видях как си ползвал tryparse синтаксиса и имам един въпрос: int.TryParse(Console.ReadLine(), out a)  това out a накрая какво по-точно прави.

0
KrasimirPetkov avatar KrasimirPetkov 328 Точки

Не е проблем да се разделят проверките за невалидно и нечетно число. Просто за конкретната задача се получава и този вариант. В Judge дава 100/100, иначе не бих качил решението.

Относно out в TryParse - то указва в коя променлива да се запише числото, в случай че Parse-ването е успешно.

0
YordanDringov avatar YordanDringov 26 Точки

Може ли да обясниш какво точно прави параметърът "out", който си ползвал в решението си? 

0
YordanDringov avatar YordanDringov 26 Точки

Може ли да обесниш какво точно прави параметъра "out", който си ползвал? 

0
KrasimirPetkov avatar KrasimirPetkov 328 Точки

out посочва в коя променлива да се съхрани стойността. Тъй като TryParse по принцип връща bool (дали parse-ването е било успешно), с out казваме къде да запише резултата, ако всичко е минало добре. :)

0
Dargo avatar Dargo 44 Точки

out е ключова дума, която подава аргумента по референция както прави и ref с разликата, че при out променливата, която подаваш на метода не трябва да е инициализирана, а при ref трябва да е инициализирана.Метод, който приема параметър с out трябва задължително да го инициализира в кода си.

Но ползването на ref и out се счита за лоша практика, затова трябва да се избягват при писането на методи, ако може.

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