Ta bort enskild vara ur en kundvagn (java)

Permalänk
Medlem

Ta bort enskild vara ur en kundvagn (java)

Håller på och meckar lite med en simpel kundvagn men skulle behöva få till en funktion som är rätt bra att ha.

Har gjort ett program med en arraylista där man kan lägga till varor med Namn, antal och pris samt ta bort varor och söka varor och se aktuell lagerstatus. Så långt är allt bra men problemet kommer när jag ska ta bort varor.
Lyckas inte göra så att jag kan ta bort endast en av varor utan alla försvinner.
Alltså, jag lägger till Bröd, 12 st och 15:-. Sen vill jag ta bort endast ett bröd, hur gör jag då?

Såhär ser koden ut för min removefunktion.

jTextArea1.setText(null); String sok=jTextField4.getText(); Vara soktVara=null; if(minavaror==null){ minavaror=Kundvagn.getKundvagn(); } for (Vara varan:minavaror){ if(varan.getnamn().equalsIgnoreCase(sok) ){ soktVara=varan; minavaror.remove(varan); break; } } if (soktVara!=null){ jTextArea1.append(soktVara.getnamn()+" har tagits bort."); } else{ jTextArea1.append(sok+" finns inte i lager."); }

Väldigt tacksam för hjälp

Permalänk
Medlem

Tilldela varorna någon form av ID-nummer och skicka in ett ID att ta bort istället?

Permalänk
Medlem

Har jag uppfattat det rätt att du vill minska antalet från 12 till 11?
Isåfall ändrar du bara antalet i objektet Vara, t.ex:

for (Vara varan : minavaror) { if(varan.getnamn().equalsIgnoreCase(sok)) { soktVara=varan; varan.Quantity--; break; } }

Permalänk

Precis som Findah skriver ska du ange ett varuid till alla varor. Det blir absolut lättast att hålla koll på saker på så vis.

Visa signatur

Citera, tack!
Har du läst tråden om strandhögtalare och andra musiklådor?

Permalänk
Medlem

Hur gör man så att varje vara man lägger till får ett ID?

Längst upp i koden för mitt GUI initierar jag min array på detta viset;
Sen har jag en separat fil där jag har alla mina set och get metoder samt variabler som håller namn, antal och pris.

ArrayList<Vara> minavaror=Kundvagn.getKundvagn();

Såhär ser min kod för att lägga till en vara ut:

Vara nyvara = new Vara(); jTextArea1.setText(null); try { if(minavaror==null){ minavaror=Kundvagn.getKundvagn(); } nyvara.setNamn(jTextField1.getText() ); nyvara.setPris(Double.parseDouble( jTextField2.getText() )); nyvara.setAntal(Integer.parseInt( jTextField3.getText() )); minavaror.add(nyvara); // Skriver ut i textarean jTextArea1.append("Vara\tPris\tAntal\tSumma\n\n"+nyvara.getnamn()+"\t"+NumberFormat.getInstance().format(nyvara.getpris())+":-\t" +nyvara.getAntal()+" st\t"+NumberFormat.getInstance().format(nyvara.getpris()*nyvara.getAntal() )+":-"); } catch(NumberFormatException exp) { JOptionPane.showMessageDialog(rootPane, "Var vänlig fyll i alla fält korrekt."); } }

Garrets metod funkar dock perfekt för att minska antalet men smidigare hade kanske varit att man även får välja hur många man vill ta bort på något sätt. Alltså ett till textfält där man får mata in hur många man vill ta bort och på något sätt knyta ihop det hela.

Permalänk
Medlem

Var ett tag sedan jag programmerade Java så följande kod är inte testad så den fungerar men jag hoppas du förstår vad jag menar.

varan.setAntal(varan.getAntal() - Integer.parseInt(tbAntal.getText()))

Du minskar alltså antalet på den valda varan med det antal du skrivit in i textfält tbAntal.

Ang. ID per vara kan du använda det id som kommer från listan för att göra det enkelt, men det jag tror Findah och blomquist menar är att varje vara har ett uníkt id, t.ex. Vara 1 har id 12345 som man sedan använder för att identifiera vilken vara som ska tas bort ur kundvagnen.

Permalänk
Medlem

eller snyggar skapar en ny method:

decreaseQuantity(int amount) throws InvalidAmount;

och sen

varan.decreaseQuantity(Integer.parseInt(tbAntal.getText()))

Permalänk
Medlem

Tack för alla svar, tror jag fått till en någorlunda fungerande version nu iallafall

Finns dock aaalltid utrymme för förbättringar!

Permalänk
Hedersmedlem

Har inte sysslat med denna typ av programmering så förslaget kanske inte ger något.

Jag antar att det är såhär många populära sidor gör. Att istället ha en lyssnare som kollar när man har markerat fältet med antal och sen när något annat markeras eller en knapp trycks så uppdateras antalet och totalpris t ex. Då kan man ju enkelt ändra antalet båda uppåt eller neråt utan att behöva fylla i hur man man vill lägga till eller ta bort.

Har inte kodat till hemsidor så vet inte hur svårt sånt här är att fixa men känns inte som det borde vara allt för omöjligt.