Софтуерно Инженерство
Loading...
+ Нов въпрос
kokoteofilov1 avatar kokoteofilov1 1 Точки

7. Andrey and Billiard - Objects and Classes

https://pastebin.com/uCeg5FRJ
Опитвам се да накарам задачата да работи, когато един клиент има няколко поръчки. Схващам логиката, но не мога да го напиша като хората. Гърми, когато влезе в проверката на ред 47( ако има клиент с това име, добави поръчката към неговата сметка).

Някой може ли да ми каже защо кода на ред 47 гърми, и как мога да го редактирам, така че да работи?

Тагове:
1
Programming Fundamentals 24/10/2017 21:49:15
MilenaSl avatar MilenaSl 161 Точки

Добави след 35-ти ред това:

                c.Purchase = new Dictionary<string, int>();

и ще спре да гърми. Винаги трябва да се инициализира нова колекция. Най-добре ще разбереш защо, ако пробраш да дебъгнеш с и без този ред и проследиш разликата в стойностите за Purchase. 

0
kokoteofilov1 avatar kokoteofilov1 1 Точки

За жалост пак гърми същото нещо на ред 48. Дава тази грешка: Unhandled Exception: System.ArgumentNullException: Value cannot be null. 

 

0
MilenaSl avatar MilenaSl 161 Точки

Имам следното преположение: В dictionary ключовете не могат да се повтарят, затова ако същия клиент си поръча същата напитка, не би трябвало да можеш да я добавих в речника. Решението, за което се сещам, е да ползваш List<Customer>

Ето го кода ти лееко преправен като за 100/100:

https://pastebin.com/UgzuScet

0
VasilValchanov avatar VasilValchanov 558 Точки

 

           else { 

                      customers[c.Name].Purchase.Add(order[1], int.Parse(order[2]));

                  }

Проблема за гърмежа е тук когато трябва да вкараш продукт на вече съществуващ ключ

 

c.Name на customer-a я инициялизираш в if-а и в else идва без стойност, следователно хвърля грешка понеже не съществува такъв ключ. Също така трябва да инициализираш Customer преди да адваш стойности

ето така няма да ти гърми -->

 customers[order[0]] = new Customer();
 customers[order[0]].Purchase.Add(order[1], int.Parse(order[2]));

0