Професионална програма
Loading...
+ Нов въпрос
office_kanev avatar office_kanev 6 Точки

Exercises: Encapsulation Problem 3. Shopping Spree

колеги някой може ли да ми каже защо джъджа ми гърми на 61-ви ред със ексепшъна
array_push() expects parameter 1 to be array, null given in C:\Users\Administrator\AppData\Local\Temp\tmp29C7.tmp on line 60
и също на  133 със 
 Invalid argument supplied for foreach() in C:\Users\Administrator\AppData\Local\Temp\tmp29C7.tmp on line 139

а при мен програмата си работи коректно, знам че кодът със сигурност не нарисан правилно по принципите на ООП

ето го и кодът

0
PHP Web
worminer avatar worminer 104 Точки

Здравей,
иначе ще предположа че на предния

$products = Person::$bagOfProducts[$name];
array_push($products, $productname);


$products е определен продукт а не арей

можеби трябва да е 

$products = Person::$bagOfProducts;
array_push($products, $productname);

също така забелязвам че функцият ти 

affordProducts Пнякога получава за име 1вата буква от името на човека .. тоест най вероятно някъде я раздробяваш на арей..
0
20/02/2017 16:05:50
office_kanev avatar office_kanev 6 Точки

Problem 3.Shopping Spree

Create two classes: class Person and class Product. Each person should have a name, money and a bag of products. Each product should have name and cost. Name cannot be an empty string. Money cannot be a negative number.

Create a program in which each command corresponds to a person buying a product. If the person can afford a product add it to his bag. If a person doesn’t have enough money, print an appropriate message ("[Person name] can't afford [Product name]").

On the first two lines you are given all people and all products. Next you will be given all purchases people made until END is reached. Print a message when someone makes a purchase. After all purchases print every person in the order of appearance and all products that he has bought also in order of appearance. If nothing is bought, print the name of the person followed by "Nothing bought".

In case of invalid input (negative money exception message: "Money cannot be negative") or empty name: (empty name exception message "Name cannot be empty") break the program with an appropriate message. See the examples below:

Examples

Input

Output

Pesho=11;Gosho=4;

Bread=10;Milk=2;

Pesho Bread

Gosho Milk

Gosho Milk

Pesho Milk

END

Pesho bought Bread

Gosho bought Milk

Gosho bought Milk

Pesho can't afford Milk

Pesho - Bread

Gosho - Milk, Milk

Mimi=0;

Kafence=2;

Mimi Kafence

END

Mimi can't afford Kafence

Mimi – Nothing bought

Jeko=-3;

Chushki=1;

Jeko Chushki

END

Money cannot be negative

0
nstoichkov avatar nstoichkov 1 Точки

Здравейте и аз имам проблем с тази задача. Поиграх си да изпълня условието но получавам най много 40 / 100

играх си да сложа проверки и да хвърлям Exceptions при празно име или отрицателна стойност на парите или цената на продукта както и след като се въведе грешна стойност програтам да продължава да получава входни данни докато не се подаде END използвах goto за да skip на минаването през другата част от програмта за да не оптечатва нищо друго след  "Money cannot be negative" или след "Name cannot be empty" както е в примера и пак не става

Когато я тествам с примерите от условието на задачата и трите ми се изпълняват както трябва но в judge 40 / 100

На Test #3, Test #4,Test #5  имам само  (Runtime error) но не мога да видя   кое поражда тази грешка и как да я избегна защото не дават какъв е Input и output при тези тестове.

Това е моето решение http://pastebin.com/G0i0u5Az

Благодаря Ви предварително

0
03/03/2017 01:11:05
fbinnzhivko avatar fbinnzhivko 1582 Точки

Ползването на goto не е добра практика до колкото знам.
http://pastebin.com/FhF4k4nJ

Разгледай моето решение.Дано ти помогне

0
03/03/2017 01:29:47
nstoichkov avatar nstoichkov 1 Точки

Благодаря ти ще го разгледам

0
nstoichkov avatar nstoichkov 1 Точки

Твоето решение ми помогна. Благодарности :)

Вместо goto което е лоша практика използвах    exit; както в твоето решение след принтиране на грешката от Exception ите

от 40 веднага получих 80 точки

0
03/03/2017 20:55:17