Софтуерно Инженерство
Loading...
Hristo_Penchev avatar Hristo_Penchev 388 Точки

[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 38 Точки

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

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

Components.cs

Computer.cs

PcCatalog.cs

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

1
Filkolev avatar Filkolev 4428 Точки

Аз съм си я направил без вход от потребителя. Кажи по-подробно къде какво дава 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 335 Точки

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

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

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

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

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

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

 

Components.cs

Computer.cs

PcCatalog.cs

1
AleksandurSeferinkin avatar AleksandurSeferinkin 335 Точки

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

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

1
atanasovam avatar atanasovam 38 Точки

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

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

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

0