8. Car Salesman
Колеги, днес възможното си време за решаване на задачи го посветих изцяло на тази задача. И понеже "много добре" ги разбирам класовете, ще бъда в отпуска специално заради тях. Найстина ще бъда благодарна, ако поне успея да си разреша проблема, който ми се появи в тази задача. Прегледах четири видеа, но така и не видях някъде трейнър да обяснява точно тази задача. Търсих информация и в https://stackoverflow.com/ , но за жалост всичко беше напразно за разрешаването на проблема ми и за това моля за помощ. Предварително ще отбележа, че все пак днес успях да направя поне едно работещо решение, което не мога да приема и за това се опитвам да го коригирам. Не разбирам защо трябва да проверявам в main дали някои от подадените ми стойностти е стринг или цифра за да разбера дали имам Displacement- 50 примерно или Efficiency- А+. За мен най-удачния вариант е проверката да става директно с конструктори с int или string, но след като направя конструкторите не успявам на int пропърти да сетна дефоутната стойност- "n/a". Ако примерно още първоначално направя всички пропъртите на string сетването на "n/a" е възможно, но ми се разваля смисъла на конструкторите, защото програмата няма да разбере дали искам да му подам string this.Displacement или string this.Efficiency. Дори при това положение програмата изисква от мен да изтрия единия от конструкторите, а аз искам да си ги запазя. Има ли такава възможност да се промени синтаксиса, но да се запази основната логика и самите конструктори? Ако дефултните стойности бяха int предполагам, че програмата щеше да работи коректно, но те са string.
public Car(string model, Engine engine)
{
this.Model = model;
this.Engine = engine;
this.Weight = "n/a"; // this is wrong, this.Weight is int
this.Color = "n/a";
}
Същия проблем имам и с конструктора за Engine, защото this.Displacement е int и не може да е равно на string "n/a".
public Engine(string model, string power)
{
this.Model = model;
this.Power = power;
this.Displacement = "n/a"; // this is wrong, this.Dispalacement is int
this.Efficiency = "n/a";
}
Моят опит:
клас Car- https://pastebin.com/r3qkAtSe
клас Engine- https://pastebin.com/TmhitANe
Main- https://pastebin.com/g1X9PhXb
Условие- Условие: https://softuni.bg/trainings/resources/officedocument/52737/defining-classes-exercise-csharp-advanced-september-2020/3007
Дали е възможно да ги декларарираш като nullable int (int?) и когато нямат стойност ("n/a") да ги сетваш на null, понеже доколкото виждам ползваш стринг само за да покажеш, че не са достъпни и нямат стойност?
Мерси за включването. :)
Не знам дали разбирам правилно, но ако нямат пропъртитата стойност подадена във входните данни те трябва да си останат "n/a", на ако имат аз трябва чрез някой от конструкторите да я приема. На изхода при печатането ще ми се търси или "n/a" или конкретна стойност за даденото пропърти. От голяма важност ми е конструкторите да се запазят така, както са, защото програмата само по това дали пpопъртито е инт или стринг разбира кое точно се сетва на стойност и кое отива по "n/a".
Но ако сложа null при липса на стойност, после ще трябва преди печатането да ги изнамирам всичките, които са null за да ги сетна на "n/a" и пак ще се сблъска със същия проблем. А за int пропърти по-скоро да ми даде програмата да го сетна на нула, а не на null. За стринг пропърти бих могла да го сетна на null, но май не ми е добра опция.
Поздрави!
Колеги,
разреших си проблема и ми се получи 100/100 .
bad12 благодаря, че ми подхвърли идеята за сетването на 0.
class Car- https://pastebin.com/r3qkAtSe
class Engine- https://pastebin.com/TmhitANe
Main- https://pastebin.com/g1X9PhXb
Тези пропъртита, които са int по дефоултна стойност си ги сетвам в самия клас на 0. Накрая в ToString() метода добавям две допълнителни if/else конструкции за двете пропъртита int Weight и int Displacement, като ако случайно стойността им е 0 на StringBuilder() ще се подадe "n/a" и накрая точно така ще си се и отпечата.
if (this.Weight == 0)
{
sb.AppendLine(" Weight: n/a");
}
else
{
sb.AppendLine($" Weight: {this.Weight}");
}
if (this.Engine.Displacement == 0)
{
sb.AppendLine(" Displacement: n/a");
}
else
{
sb.AppendLine($" Displacement: {this.Engine.Displacement}");
}