Loading...
Stan4o avatar Stan4o 0 Точки

Проблем със задача 08. Mentor Group от Класове и обекти

Здравейте,

Мога ли да помоля някой добър човек за малко помощ с посочената в заглавието задача? Мъчих я, гледах я, но не мога да докарам до повече от 50/100. Според мен, има някаква проверка на входящите данни, която не хващам. Например, когато въвеждам коментарите, може ли да има такава заявка, при която да има Username и коментари, които са празни стрингове.

Пример:

username- - - при такъв сценарий, имам username и два стринга, в които има по един спейс. Тези пропускам ли ги, печатам ли ги? Направих проверка за тях и не помогна. Също проверих и за празни стрингове без спейс (просто input = Username--- ).Значи най-вероятно не е това. Но все пак.

Ето какво съм написал до тук: https://pastebin.com/7UjXTA4e

Благодаря

Тагове:
Quake3 avatar Quake3 546 Точки
Best Answer

Здравей,

Не знам дали ще имам време да намеря всички проблеми, но ще пиша 1 по 1, каквото намирам.
 

Student student = new Student(name);
studentGroup.Add(student);

for (int i = 0; i < tempDates.Count; i++)
{
   DateTime parsedDate = DateTime.ParseExact(tempDates[i], "dd/MM/yyyy", CultureInfo.InvariantCulture);

   if (student.Dates.Any(d => d.Date == parsedDate) == false)
   {
      student.Dates.Add(parsedDate);
   }
}

В този пасаж 1-во създаваш и после добавяш нов ученик и още по-после му присвояваш някакви дати.
Създай ученика, после му присвои датите и най-накрая го добави.
Проверката за съществуващи дати няма смисъл, защото ученикът е нов обект.

Тук:

// Check if there's any comments at all. If so, check if they are not empty strings 
                if (tokens.Length > 1)

Няма нужда от List<string> comment, коментарът е стринг и трябва просто да бъде добавен към коментарите за съществуващ студент.

Ако гледаме едно и също условие, никъде не пише, че не може да има 2 и повече еднакви дати.

Това решение има 100%, но има две повтарящи се части: for (int i = 0; i < tempDates.Count; i++), можеш да го оптимизираш.
 

0
11/07/2018 02:49:40
Stan4o avatar Stan4o 0 Точки

Здрасти. Логимата ми е, че първо се уверявам, че изобщо имам студент, на който после да проверя, дали има записана, датата на която е присъствал.
- създай

- парсни дата (минивам през всички дати)

- ако няма така, добави

Както го описваш, ако имам първо ентри за някакъв студент и са ваведени две (или повече) еднакви дати, тогава няма да го хвана, ако разбирам правилно.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

колегата ти е подсказал но нищо не си разбрал. Значи датите ама хич не ти влият. Проверяваш студента по име ако го нямаш и ти върне празен обект просто го добавяш ако ти върне студент които същестува просто ще му презапишеш данните или каквото е там по условие. Не си дал условието а на работа не ми се ровеше и се ориентирам по кода на колегата.Тея безумни проверки дето ги правиш са излишни. Все пак мога да ти дам 2 различни студента с една дата на присъствиеи тн примерно и и твоите проверки ще те изгърмят още там.

спри прочети условието и започни наново най-добре.

0
11/07/2018 09:33:55
Stan4o avatar Stan4o 0 Точки

Здрасти. Погледнах оригиналната бележка на колегата. После той е едитвал, така че по-кротко. :) А сега по същество -  благодаря ти за усилията и на теб.

1. По въпросът с условието - за първи път пускам във форума и още се уча. Да разбирам, че иконката с двете стрелки една под друга в коментарът на колегата означава, че е имало едит в еди кой си момент? А за самото условие, ако го бях плеснал като текст например, имам ли гаранция, че някой няма да каже "Защо си го плеснал? Нали си дал името на задачата. Ние не сме малки деца. Можем да си го намерим" и тн.
2. И по-важно - наистина искам да разбера твоят коментар за двамата студенти и двете еднакви дати. В самото условие на задачата има само един пример и той е такъв:

nakov 22/08/2016,20/08/2016
simeon10 22/08/2016
end of dates

В кодът на моя ОП, макар и неелегантни, проверките записват правилно и двата реда. Какво точно имаш предвид? Питам те най-сериозно и ще се радвам на твоят коментар, защото усещам, че между самото писане и разбирането добре на условието на коя да е задача, за сега повече проблеми имам със второто. Благодаря предварително. Станислав

0
Stan4o avatar Stan4o 0 Точки

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

1. Да, не пише, че не може да има две еднакви дати за един и същи студент, но то няма логика. За какво да записвам две еднакви дати за един студент? Ако това е присъствие, как се връзва? Тук грешката излиза моя, защото допълвам условието.

2. По въпросът със Лист<стринг> за коментарите във 2-рата част, след като махнах проверката за повече от един коментар и се оправи. Но като ми изгърми код и ми даде 50/100, аз започвам да мисля, коя проверка не съм хванал. Можеше да има повече от един коментар (отделени с '-') и аз да не съм го сплитнал. Не знам, понеже не виждам инпута на тестовете. Най-малкото, самият факт, че ще записвам коментарите в лист, води и към такъв евентуален извод. Важното, което искам да питам по този въпрос е това. Защо кодът с проверката на това, колко коментара има и ако има поне един, да ги пълни в лист ми гърми? (вероятно има коментар, който има по средата '-' и се сплитва на два отделни части, което ще хвърли грешка).

Благодаря. Станислав

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

както казах няма нужда да проверяваш датите за теб студента е валиден ако съществува,да го проверяваш не ми се обеснава но нямам и време на работа затова ето :

https://pastebin.com/4xKYUHNi простичко и обяснено решението ми от миналата година общо взето имаш много излишен код излишни проверки и безумна логика.

0
Quake3 avatar Quake3 546 Точки

Здравей,

Само един съвет имам: Когато си готов (докъдето си готов) с някакъв код, се опитай се да го оптимизираш да стане по-четим и по-близък до условието, така че когато започнеш да четеш условието - буквално да го виждаш на екрана в кода си. Когато аз правя това, много често виждам неща, които съм пропуснал в условието.

"Защо кодът с проверката на това, колко коментара има и ако има поне един, да ги пълни в лист ми гърми? "
Конкретно на въпроса ти, можеш ли да дадеш изчистен код, в който само описаното "гърмене" е проблем и под "гърми" се разбира crash, нали?

0
Stan4o avatar Stan4o 0 Точки

Ето кодът, който ми дава 90/100 (това имам предвид под гърми :) ), след като съм спрял да проверявам, дали датата се повтаря или не - https://pastebin.com/yaw1ieUm

В него съм отбелязал частта, където търся n на брой коментари. Ако я изтрия и допусна, че коментара е само 1, ми връща 100/100.


Правилното ми решение -

https://pastebin.com/tuiCvTSd

0
11/07/2018 16:37:06
Quake3 avatar Quake3 546 Точки

Здравей,

разбирам въпроса ти. Не мисля, че е възможно по начина, по който е направено.

Да кажем, че ще  успеем да отпечатаме правилно този лист който имаме,  имитирайки стринг като:

1. Отпечатваме "- " само преди 1 вия елемент и то само ако има такъв

2. За всеки следващ елемент, преди него слагаме '-', защото сме сплитнали и вече тиретата липсват.

Използваме Console.Write, за да не правим нови редове.

3. След последния елемент слагаме Console.WriteLine();
Тоест имитираме поведението което бихме имали, ако печатахме стринг.

Друг вариант е да използваш String.Join("-", student.Comments), но честно казано аз не знам как ще се справиш, ако входът изглежда така:
nakov-Excellent algorithmetic thinking  ----- aaa-bbb. Тези тирета не мисля, че ще ги върнеш и някак си трябва да ги има в листа, което пък вече съвсем няма смисъл :)
Задачата е замислена да работи със стринг, а не лист от стрингове.

Само за протокола: ако при сплитването се използва StringSplitOptions.None, може да се възстанови напълно с join.

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