Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Homework] OOP - Defining Classes - Problem {3} - PC Catalog - изчисляване на цената

Здравейте,

Боря се със задачата PC Catalog, но не мога да се оправя с изчисляването на цената на компютъра. Ето кода на класа:

http://pastebin.com/E0xz6fY9

Поради някаква причина ми връща нула. Явно не достъпва цените на компонентите както трябва. 
Ето и кода на останалите класове:


http://pastebin.com/rdLkgz5p

http://pastebin.com/EDgjG6j6

Тагове:
-1
C# OOP Basics
atanasovam avatar atanasovam 39 Точки

Добре де, без user input няма ли да стане? (без Console.ReadLine, всичко да си се пише в .cs файла)

Цял ден си играя с тая задача и не мога да я наглася... стигнах донякъде, ама е мн дървена и вади stack overflow exception

Components.cs

Computer.cs

PcCatalog.cs

Може ли малко помощ, трябва да има някакъв по-интелигентен метод от моя

1
Filkolev avatar Filkolev 4482 Точки

Аз съм си я направил без вход от потребителя. Кажи по-подробно къде какво дава overflow.

2
velio84 avatar velio84 241 Точки

Здрасти,

stackoverflow exception-a можеш да го хванеш с дебъгера. Пони отначало и като изгърми ще ти каже :)
Няколко други неща ми правят впечатление:

Mетодите public string DisplayComponents() и public string DisplayComputer() са ти излишни. Вместо тях пишеш

public override string ToString()

и в него връщаш някакъв стринг - това override-va името-на-обекта.ToString();

Т.е., ако имаш Component hdd; и му дадеш Console.WriteLine(hdd) -> това ще върне стойността, която си дал в override ToString()

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

if (this.GraphicsCard != null)

{ output += this.GraphicsCard.ToString(); }

За общата цена на компютъра - трябва да обходиш всички компоненти и да им вземеш .Price
Това става накрая най-лесно, като си оправиш останалите проблеми с exception-ите по задачата, ще го направиш лесно.

2
24/01/2015 00:13:30
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

В set-ъра на пропъртито Price в класа Computer го викаш рекурсивно.

this.Price = price; - Така пропъртито се вика само и се получава безкрайна рекурсия - StackOverFlowException

Също така в C# има елегантен, бърз и удобен начин да съединяваш стрингове - StringBuilder

1
24/01/2015 02:26:51
atanasovam avatar atanasovam 39 Точки

Мерси много пичове, оправих го С:

Не мога само да го накарам да пише лв след сумата - излиза ми някво такова

 

Components.cs

Computer.cs

PcCatalog.cs

1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Console.OutputEncoding = System.Text.Encoding.Unicode;

Ако пак не стане, значи трябва да промениш font-a на конзолата на 'Lucida Console'.

1
atanasovam avatar atanasovam 39 Точки

Чук ;д
като го сложа на Lucida Console и UTF-а, и Unicode-а вадят лв.

1
kenderov.emil avatar kenderov.emil 6 Точки

Колеги, аз имам същия проблем. Дебъгвах колкото можах, видях и други решения на тази задача, така и не открих грешката. Пращам архивен файл чрез TinyUpload: http://s000.tinyupload.com/?file_id=77490963126074192789. Много мерси предварително за помощта :)

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