[Homework] OOP - Defining Classes - Problem {3} - PC Catalog - изчисляване на цената
Здравейте,
Боря се със задачата PC Catalog, но не мога да се оправя с изчисляването на цената на компютъра. Ето кода на класа:
http://pastebin.com/E0xz6fY9
Поради някаква причина ми връща нула. Явно не достъпва цените на компонентите както трябва.
Ето и кода на останалите класове:
http://pastebin.com/EDgjG6j6
Аз съм си я направил без вход от потребителя. Кажи по-подробно къде какво дава overflow.
Здрасти,
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-ите по задачата, ще го направиш лесно.
В set-ъра на пропъртито Price в класа Computer го викаш рекурсивно.
this.Price = price; - Така пропъртито се вика само и се получава безкрайна рекурсия - StackOverFlowException
Също така в C# има елегантен, бърз и удобен начин да съединяваш стрингове - StringBuilder
Мерси много пичове, оправих го С:
Не мога само да го накарам да пише лв след сумата - излиза ми някво такова
Components.cs
Computer.cs
PcCatalog.cs
Console.OutputEncoding = System.Text.Encoding.Unicode;
Ако пак не стане, значи трябва да промениш font-a на конзолата на 'Lucida Console'.
Чук ;д
като го сложа на Lucida Console и UTF-а, и Unicode-а вадят лв.
Колеги, аз имам същия проблем. Дебъгвах колкото можах, видях и други решения на тази задача, така и не открих грешката. Пращам архивен файл чрез TinyUpload: http://s000.tinyupload.com/?file_id=77490963126074192789. Много мерси предварително за помощта :)