View Single Post
m0b
m0b's Avatar
DonorAdministrator
I et slikt tilfelle ville jeg valgt en litt mer objektorientert metode. Jeg ville opprettet en klasse (som enten arver fra en abstract basetype eller interface) for hver valutaenhet med verdiene som hver av de enhetene har. Hver klasse har to felt (Ett for verdi og ett for type(lapp,krone,øre)).

Jeg ville deretter opprettet et Dictionary med TKey lik string og TValue lik List<ValutaEnhet> (dette fordi man da kan hente ut .Count på korrekt type). Så legger jeg alle valutaenhetene i Dictionary med TKeyens verdi som teksten verdi+type. Da får man eksempelvis 50lapp, 20krone etc inn i Dictionary.

Dictionary sin oppgave i dette tilfellet vil være å inneholde de mulige valutaene som systemet kan betale tilbake med. Man fyller derfor opp Dictionary med alle valutaenhet-klassene man har laget. Disse legges inn i stigende rekkefølge, dette gjør at man til enhver tid vil kunne finne den største valutaen som det kan betales med, som element nummer 0. (Skjønt, dette MÅ ikke gjøres med dictionary. Det kan også gjøres med en generisk liste (List<ValutaType>))

Deretter beregner man ut restbeløpet med betalt - pris. Opprett en ny liste eller dictionary for å legge til objektene i. Man går deretter inn i en while-løkke og sjekker om restbeløpet er større enn element 0 i det første dictionary, hvis ja så kan man bruke en factory eller if-statement til å sjekke hvilken type første element er. Man oppretter så et objekt som er likt typen som ligger i element 0 (eller man kan klone det) og legger dette inn i det sekundære dictionary/list og trekker objektets verdi fra restbeløpet. Hvis element 0 er større enn restbeløpet, så fjerner man det fra det opprinnelige dictionary.

Når dette er gjort, er det bare å gå igjennom den sekundære listen/dictinary og telle antall objekter (Count) av hver type og slenge på rett suffiks for antall objekter av én type.

Har ikke tid til å skrive koden, men slik jeg ser det skal det være rimelig fram. Håper dere skjønner hva jeg mener, om ikke så kan jeg skrive eksempelkode for det jeg beskriver.