Loading...
Elena123456 avatar Elena123456 235 Точки

8. Car Salesman

Колеги, днес възможното си време за решаване на задачи го посветих изцяло на тази задача. И понеже "много добре" ги разбирам класовете, ще бъда в отпуска специално заради тях. smiley  Найстина ще бъда благодарна, ако поне успея да си разреша проблема, който ми се появи в тази задача. Прегледах четири видеа, но така и не видях някъде трейнър да обяснява точно тази задача. Търсих информация и в 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

 


 

 

 

 

 

Тагове:
0
C# Advanced 08/02/2021 23:47:08
Elena123456 avatar Elena123456 235 Точки

Колеги, дали може поне до края на месеца (в никакъв случай не искам веднага) някой да ми помогне за тази задача, защото пропускам явно фундаментално знание за класовете- не знам как да подходя, ако имам int пропърти, а по условие трябва да му сетна string дефоутна стойност. Изгледах две лекции за класове по два пъти, като и записки си водех докато ги гледах, но такова нещо не е споменавано. Ако пиша в чужд форум, да отговарят ми още същия ден, но не искат да си направят регистрация за Judge за да тестват решенията си и ме питат какво е "Judge"...  и а аз после се счупвам цял ден от тествания на решения, които не минават дори и на 50%. indecision

0
10/02/2021 09:22:48
bad12 avatar bad12 26 Точки

Дали е възможно да ги декларарираш като nullable int (int?) и когато нямат стойност ("n/a") да ги сетваш на null, понеже доколкото виждам ползваш стринг само за да покажеш, че не са достъпни и нямат стойност?

1
Elena123456 avatar Elena123456 235 Точки

Мерси за включването. :)

Не знам дали разбирам правилно, но ако нямат пропъртитата стойност подадена във входните данни те трябва да си останат "n/a", на ако имат аз трябва чрез някой от конструкторите да я приема. На изхода при печатането ще ми се търси или "n/a" или конкретна стойност за даденото пропърти. От голяма важност ми е конструкторите да се запазят така, както са, защото програмата само по това дали пpопъртито е инт или стринг разбира кое  точно се сетва на стойност и кое отива по "n/a".

Но ако сложа null при липса на стойност, после  ще трябва преди печатането да ги изнамирам всичките, които са null за да ги сетна на "n/a" и пак ще се сблъска със същия проблем. А за int пропърти по-скоро да ми даде програмата да го сетна на нула, а не на null. За стринг пропърти бих могла да го сетна на null, но май не ми е добра опция.

Поздрави!

0
10/02/2021 20:53:02
Elena123456 avatar Elena123456 235 Точки

Колеги,

разреших си проблема и ми се получи 100/100 .smiley

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}");
            }

 

0
Hvpetrow avatar Hvpetrow 11 Точки

Заповядайте едно решение и от мен  :) 

https://pastebin.com/zk6RY8Lg - Car.cs

https://pastebin.com/3zAeZGfF - Engine.cs

https://pastebin.com/6cPFMxtp - Program.cs

П.С. : С речник смятам че е по нагледно .

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