Witam, zaczynam swoją przygodę z programowaniem obiektowym i utknąłem w pewnym momencie swojego programu. Mam dwie klasy Pozycja i Zamówienie, w klasie Pozycja posiadam pola: cena, ilość, nazwa towaru. W Zamówieniu robię wszystkie inne rzeczy typu: obliczenie wartości produktu, całego zamówienia oraz rabatu w zależności od ilości sztuk. W moim przypadku metoda calculateDiscount liczy wartość zamówienia dla wszystkich pozycji w zależności od ilości sztuk. Pomyślałem, że chciałbym mieć możliwość udzielenia rabatu na konkretną pozycję. Tutaj mam problem, bo totalnie nie wiem jak zaimplementować taką metodę w klasie zamówienie. Proszę o podpowiedź.
package programming.com.pl;
public class Position {
private String name;
private double price = 0;
private int quantity = 0;
public Position(String name, double price, int quantity){
this.name = name;
this.price = price;
this.quantity = quantity;
}
public double getPrice() {
return price;
}
public int getQuantity() {
return quantity;
}
public String toString(){
String str = String.format("%4s,%4s zł,%2s szt.", name,price,quantity);
return str;
}
}
package programming.com.pl;
import java.util.ArrayList;
public class Order {
final private ArrayList<Position> positions = new ArrayList<>();
private double calculateProduct() {
double sum = 0;
for (Position position : positions) {
sum = position.getPrice();
}
return sum;
}
double sumOrder() {
double sum = 0;
for (Position x : positions) {
sum += calculateProduct();
}
return sum;
}
void addPosition(Position p) {
positions.add(p);
}
void deletePosition(int index) {
positions.remove(index);
}
double calculateDiscount() {
double salePrice = 0;
for (Position position : positions) {
if (position.getQuantity() >= 5 && position.getQuantity() <= 10) {
salePrice = calculateProduct() - (calculateProduct() * 0.05);
} else if (position.getQuantity() <= 10 && position.getQuantity() <= 20) {
salePrice = calculateProduct() - (calculateProduct() * 0.1);
} else {
salePrice = calculateProduct() - (calculateProduct() * 0.15);
}
}
return salePrice;
}
public String toString() {
StringBuilder sb = new StringBuilder("Order is: \n");
for (Position p : positions) {
sb.append(p).append("\n");
}
sb.append("Order sum is: ").append(sumOrder()).append("\n");
sb.append("Discount is: ").append(calculateDiscount());
return sb.toString();
}
}