J'ai 3 classes simples CashRegister, Bill and Position. Un CashRegister est composé d'objets Bill et un objet Bill est composé d'objets Position. Ils sont mis en œuvre comme suitTrouver la fréquence des produits dans cette classe CashRegister
class CashRegister
def initialize
@bills = []
end
def product_frequency
#???
end
def << bill
@bills << bill
self
end
end
class Bill
attr_reader :positions,:nr
protected :positions
def initialize(nr)
@nr = nr
@positions = []
end
def << pos
@positions << pos
self
end
end
class Position
attr_reader :product,:quantity,:price
def initialize(product,quantity,single_price)
@product = product
@quantity = quantity
@price = single_price * quantity
end
end
Je veux écrire une méthode de product_frequency qui calcule la fréquence d'un produit acheté dans le CashRegister. Cette méthode retourne un hachage, avec le produit comme clé et la fréquence comme valeur. Un exemple serait:
pos1 = Position.new('Chicken', 5, 12)
pos2 = Position.new('Soup', 6, 24)
pos3 = Position.new('Burger', 3, 19)
pos4 = Position.new('Chicken', 2, 12)
pos5 = Position.new('Soup', 8, 24)
pos6 = Position.new('Burger', 9, 19)
bill1 = Bill.new(1) << pos1 << pos2 << pos3 #Chicken: 5;Soup: 6;Burger: 3
bill2 = Bill.new(2) << pos4 << pos3 << pos2 #Chicken: 2;Soup: 6;Burger: 3
bill3 = Bill.new(3) << pos6 << pos6 << pos6 #Chicken: 0;Soup: 0;Burger: 27
bill4 = Bill.new(4) << pos4 << pos5 << pos4 #Chicken: 4;Soup: 8;Burger: 0
my_cash_register = CashRegister.new << bill1 << bill2 << bill3 << bill4
my_cash_register.product_frequency #{'Chicken' => 11, 'Soup' => 20, 'Burger' => 33}
Comment puis-je accomplir ce résultat?
Qu'avez-vous essayé jusqu'à présent? Veuillez indiquer votre code. Quel est votre problème? – spickermann
@spickermann Cela vient d'un énorme exercice que j'ai. J'ai essayé de minimiser le problème autant que possible. La réponse de Bartosz fonctionne, mais seulement lorsque la méthode ** positions ** de la classe Bill n'est pas ** protégée **. Y a-t-il moyen d'y parvenir avec des ** positions ** encore ** protégées **? –