Witam wszystkich
Mam program obiektywny z 2 klasami, jedna klasa to pozycje w sklepie, druga to zamówienia. Mam problem z metoda dodajPozycje a dokładniej z powtorzeniem. Założenie jest takie, że jeśli dodam 2 takie same pozycje do zamówienia, to ma mi wyświetlać na liście zamowien to jako jedna pozycje, ze zwiększoną liczba sztuk . Próbowałem użyć !pozycje.contains (p) zeby nie dodowało powtorzeń do listy zamówień. Następnie w else porownywałem nazwe towaru i modyfikowałem liczbe sztuk w pozycji i nastepnie przy pomocy set zamieniałem odpowieni indeks arreylisty w zamowieniu. Działa tylko przy jednym powtorzeniu bo jeśli np dodam po raz 3 kawe do zamowienia to contains traktuje to jako nowy obiekt bo poprzednia kawa na lsicie ma inna wartosc sztuk . Nie mam już pomysłu jak mogę to rozwiązać , z góry dziekuje za jakąkolwiek pomoc.
package zamówenie;
public class Main {
public static void main (String[]args) {
Pozycja p1 = new Pozycja("Chleb", 1, 3.5);
System.out.println(p1);
Pozycja p2 = new Pozycja("Cukier", 3, 4);
System.out.println(p2);
Pozycja p3 = new Pozycja("kawa", 1, 13);
System.out.println(p3);
Zmowienie z = new Zmowienie(20);
z.dodajPozycje(p1);
z.dodajPozycje(p2);
z.dodajPozycje(p2);
z.dodajPozycje(p3);
z.dodajPozycje(p3);
z.dodajPozycje(p3);
z.dodajPozycje(p3);
//z.usunPozycje(3);
//Pozycja zp1 = new Pozycja("cukier", 2, 7);
//z.edytujPozycje(1,zp1);
System.out.println(z);
}
}
package zamówenie;
import java.util.Objects;
public class Pozycja {
private String nazwaTowaru;
@Override
public int hashCode() {
return Objects.hash(cena, ileSztuk, nazwaTowaru);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pozycja other = (Pozycja) obj;
return Double.doubleToLongBits(cena) == Double.doubleToLongBits(other.cena) && ileSztuk == other.ileSztuk
&& Objects.equals(nazwaTowaru, other.nazwaTowaru);
}
private int ileSztuk;
private double cena;
Pozycja (String nazwaTowaru, int ileSztuk, double cena){
this.nazwaTowaru = nazwaTowaru;
this.ileSztuk = ileSztuk;
this.cena = cena;
}
public String getNazwaTowaru(){
return this.nazwaTowaru;
}
public int getIleSztuk(){
return this.ileSztuk;
}
public double getCena(){
return this.cena;
}
public double obliczWartosc() {
return ileSztuk *cena;
}
public String toString() {
return nazwaTowaru + " " + cena +" zl " + ileSztuk + " szt. " + obliczWartosc() + " zl " ;
}
}
package zamówenie;
import java.util.ArrayList;
public class Zmowienie {
int ileDodanych;
int maksRozmiar ;
ArrayList <Pozycja> pozycje;
Zmowienie (){
this(10);
}
Zmowienie(int maksRozmiar){
this.maksRozmiar = maksRozmiar;
this.pozycje = new ArrayList <>(maksRozmiar);
this.ileDodanych = 0;
}
public void dodajPozycje(Pozycja p) {
if (!pozycje.contains (p)) {
if(pozycje.size()<maksRozmiar ) {
pozycje.add(p);
ileDodanych++;
}
}
else
for(int j =0; j<pozycje.size();j++ ) {
if (pozycje.get(j).getNazwaTowaru().equals (p.getNazwaTowaru()) ){
int a = pozycje.get(j).getIleSztuk();
a = a + p.getIleSztuk();
Pozycja ppowielona = new Pozycja(p.getNazwaTowaru(),a, p.getCena());
pozycje.set(j,ppowielona );
}
}
}
void usunPozycje(int indeks) {
pozycje.remove(indeks-1);
ileDodanych--;
}
void edytujPozycje(int indeks,Pozycja p) {
pozycje.set(indeks-1,p);
return;
}
public double obliczWartosc() {
double lacznie = 0.0;
for(int i=0; i<ileDodanych; i++){
lacznie += pozycje.get(i).obliczWartosc();
}
return lacznie;
}
public String toString() {
String napis = "\nZamówienie:\n";
for(int i=0; i<ileDodanych; i++){
napis += (pozycje.get(i).toString()+"\n");
}
napis += "Razem: " + String.format("%.2f",obliczWartosc()) + " zł";
return napis;
}
}