Permalänk
Medlem

Java kundvagn

Håller på att skapa en kundvagn i java och har stött på ett problem då man vill lägga till fler än 1 av samma vara.
Jag vill att antalet ska öka istället för att det läggs till en ny rad med samma vara.
Hur får jag antalet att öka om varan redan finns i kundvagnen?
Har redan fixat så att varan läggs till om den inte finns innan.

Permalänk
Inaktiv

Du skulle kunna börja med att beskriva ditt problem lite bättre, men här kommer lite pseudokod

1. Kolla om varan finns i kundvagnen (med compareTo tex.)
2a (Varan finns inte) lägg till varan i kundvagnen
2b (Varan finns) öka antalet med ett
Detta kräver att varuobjekten vet hur många de är
3. skriv ut

Annat alternativ:
Ta inte hänsyn till detta alls förens du skriver ut listan
1. lägg till objekt i listan
2. sortera listan efter objekt
3. kommer det flera av samma, addera 1 då du skriver ut
4. skriv ut

Jag tycker den första lösningen är bättre

Permalänk
Medlem

Artikeln finns redan i kundvagnen och jag väljer att lägga till en likadan artikel. Finns inte varan i kundvagnen så har jag fixat så att den läggs till med namn och antal men behöver hjälp med hur jag ska utforma koden för att addera 1 till antalet.

Permalänk
Medlem

Kanske är lättare om du skapar någon slags objekt som du sedan kan lägga till i en List eller liknande.

Ett annat alternativ skulle ju kunna vara att behålla stringen och sedan använda dessa som key till en Map eller liknande.
Om sedan stringen förekommer två gånger skrivs antalet ut som två i utskriften istället för två av samma.

Permalänk
Medlem

Det låter ju som att det är en skoluppgift, så jag ska försöka att inte ge ut hela lösningen.

Det jag hade gjort först, är bestämma hur en kundvagn och en produkt representeras. Det enklaste sättet är självklart att enbart hålla t.ex. en Map med strängar av produktens namn som nyckel samt kvantitet som värde.

Exempel:

Map<String, Integer> basket = new HashMap<String, Integer>(); ... basket.put("Gurka", 1); //Lägger till en gurka till kundvagnen

Fördelen med en Map gentemot t.ex. en List, är att nycklarna (produktnamnen) är unika vilket gör det lättare att hålla reda på produkterna. För att se om en produkt redan finns i kundvagnen har du metoden Map.containsKey(key) till hjälp, och för att hämta ut ett värde har du metoden Map.get(key). För att iterera över kundvagnen använder du Map.keySet() och sedan Map.get(key).

Men! Även om ovanstående är enkelt och snabbt att implementera, hade jag gärna gjort det lite mer funktionellt och flexibelt. Nu återkommer vi till hur produkter och kundvagn representeras - i min värld är dom självklart egna klasser. För att dra det ännu längre, skulle man kunna ha en produkt som ett interface, då en produkt är relativt abstrakt. Då skulle man kunna ha implementationer av produkter som viktvara eller styckvara, där priset kräver egen logik.

Med en klass/interface Product, med egen logik per implementation, borde det vara vettigt med en egen klass för en kundvagn också - där vi kan bygga in funktionalitet för att lägga till en vara/ta bort/uppdatera antal/etc. Som en privat instansvariabel kan vi fortfarande använda en Map dock, men nu som Map<Product, Integer>.

Förhoppningsvis fick du lite uppslag!

Permalänk
Medlem

Tack så mycket bjornie.. Det blev lite klarare nu!