Loading...
manito_17711 avatar manito_17711 43 Точки

[Exam] [Solved] Chepelare Hotel Booking System - Unhandled Exception: System.NullReferenceException...

 Здравейте,

 

мъча се над поправката от миналата инстанция на курса... проблема ми е, че Judge -а хвърля грешка:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at HotelBookingSystem.Infrastructure.Endpoint.Parse(String url)
   at HotelBookingSystem.Core.Engine.Run()
   at HotelBookingSystem.HotelBookingSystemMain.Main()

На моята кошница тази грешка я няма! Не мога да намеря какво не се инстанцира.. Линк към github.

Всякакви мнения и препоръки са добре дошли.

 

Поздрави

Тагове:
0
C# OOP Advanced 01/02/2016 15:49:18
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

В Engine-а, в while цикъла на Run метода първата условна конструкция я правиш на url == null, а не на url == string.Empty и минаваш в judge всички тестове без предпоследния, който според мен е някакъв bottleneck, но и аз още не съм го намерил, така че не мога да ти помогна.

Успех!

П.С. Като оправиш този bottleneck, може да пишеш.

@RFilipov Руслане, предполагам, че и при теб е такъв проблема. Може да пробваш. Ако не стане така, може да пробваш да оградиш логиката след четенето от конзолата и след условната конструкция, която проверява за нулев вход, в една условна конструкция, която проверява за url != string.Empty. При мен изпита с виетнамските театри гърмеше в judge, докато не го направих така.

 

2
01/02/2016 09:40:38
Gesh4o avatar Gesh4o Trainer 305 Точки

Здравей,

Съгласен съм с теб, искам да кажа, че наскоро имах подобен проблем. И двата бяха породени от факта, че Judge-a може да подаде null и всъщност той така тества самата програмата т.е. всеки един край на теста завършва с подаване на null и затова ти гърми. При мен беше, че се опитвах да изчистя входа от ненужни празни пространства (url = Console.Readline().Trim();) още преди да съм го проверил дали подадения вход(url) е null и това доведе до гърмеж на всеки един тест с горе-долу подобно съобщение. 

Надявам се съм изисянил защо се получава така! Поздрави :)

1
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

Мерси много за разяснението. Сега ми стана ясно защо е така. Понеже реално няма команда за изход и иначе цикъла ще върти безкрайно. Явно judge така спира програмата. Направи ми впечатление, че няма команда за приключване на програмата, но това не ми беше хрумвало.

1
01/02/2016 09:47:52
manito_17711 avatar manito_17711 43 Точки

Ще се застрелям... Аз умишлено го промених защото си мислех, че няма как да подаде null... Благодаря.

 

Поздрави

0
01/02/2016 13:01:55
RoYaL avatar RoYaL Trainer 6849 Точки

Така работи stdin (и като цяло input потоците), guys :-))

Потокът се счита за "изтекъл", когато се опиташ да вземеш нещо от него ( Console.ReadLine() ) и не получиш нищо ( null ). Например в C, ако четеш със scanf() ще ти върне -1 при край на потока (End Of File например).

Аналогично е и четенето на файлове, без по-голяма абстракция отгоре (като ReadToEnd) в C#. След прочитане на последния ред, ако опиташ да прочетеш пак - получаваш null :) И да, върху null не може да направиш Trim() (или каквато и да е друга операция)

3
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

Ясно.smiley Знаех си, че трябва да прочета темата за работа с файлове, ама все не ми остава време...

0
manito_17711 avatar manito_17711 43 Точки

Bottleneck: UserController -> EnsureNoLoggedInUser()

Като го оправиш и ако ти гръмне първия път, пробвай пак. На последните два теста:

Test 7: Fail - 0.129s / Pass - 0.110s
Test 8: Fail - 0.119s / Pass - 0.111s

 

 

 

 

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