C# OOP Retake Exam - 16 Apr 2020
Здравейте,
Моля за примерно решение на задачата т.1 и т.2 https://judge.softuni.bg/Contests/Practice/Index/2312#0. Благодаря предварително!
Здравейте,
Моля за примерно решение на задачата т.1 и т.2 https://judge.softuni.bg/Contests/Practice/Index/2312#0. Благодаря предварително!
1 и 2 заедно https://easyupload.io/j1xzhg
Благодаря! Честно казано въпреки, че ми даде готово решение, което работи, не мога да разбера как се получава връзката в контролера за принтиране с метода History. Също така къде открояваме кой робот на каква процедура принадлежи и каква е ролята на колекция procedures?
Класът контролер има метод хистори, но ако погледнеш класа процедура, ще видиш ,че и там има също фунцкия с това име хистори, която има тази функционалност
public abstract class Procedure : IProcedure
public string History()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine($"{this.GetType().Name}"); // дава името на процедурата
foreach (var robot in this.robots)
{
sb.AppendLine($"{robot.ToString()}");
}
return sb.ToString().TrimEnd();
}
....тя пък от своя страна вика метод, който е от класа робот (override наToString() метода...името на процедурата я взимаме от тук ($"{this.GetType().Name}")) който пък от своя страна дава инфо за робота (this.GetType().Name, this.Name, this.happiness, this.energy);)
Добре, но примерно в условието пише при Hystory "Returns information about all robots which had current procedure type in the format:", което за мен значи, че ако се извика команда Hystory Polish това значи, че трябва да се принтират всички роботи, които са преминали Polish. В такъв случай не разбирам листа за процедури в контролера как прави връзката с това, кои роботи каква процедура са преминали. Видях че има Dictionary, но и там не примерно не се казва Key - Procedure, Value - List<IRobot>, които са преминали процедура от даден тип. Може би не разбирам условието
Това е метода от класа контролер:
public string History(string procedureType)
{
IProcedure procedure = this.procedures.FirstOrDefault(x => x.GetType().Name == procedureType);
return procedure.History();
}
Той приема име на процедура, с това парче код ( IProcedure procedure = this.procedures.FirstOrDefault(x => x.GetType().Name == procedureType); бъркам в колекцията private List<IProcedure> procedures, която се намира в този клас контролер и взимам процедурата с името, което са ми дали като вход. След това извиквам на самата процедура метода procedure.History();, който пък от своя страна ми връща стринг билдера с информацията от предното ми обяснение... (обърни внимание, че всяка процедура има своя колекция с роботи, които влизат в колекцията като извикаме метода DoService())...пробвай да дебъгнеш с някакви данни, имаш цялото решение, следи променливите и смятам че ще ти стане ясно кое от къде се взима..
Аха разбрах. Момента, който ми убягваше е, че всяка процедура си генерира собствена колекция, която се пълни с роботите, които са я преминали, иначе другото ми е ясно. Благодаря!