Maksymalna sumaryczna wartość dodana do ArrayList

0

Cześć, mam pytanie odnośnie list. Do listy zakupów dodaję 4 wartości produktu takie jak nazwa, cena, ilość i waga. Muszę zrobić tak, aby suma wagi wszystkich produktów nie mogła przekroczyć np. 100kg. Jeśli użytkownik chciałby dodać kolejny produkt, program wyświetli komunikat o braku możliwości dodania kolejnego. I teraz pytanie, w którym miejscu i w jaki sposób ustawić maksymalną wartość wagi całej listy?

klasa Product

public class Product {


    
    private String name;
    
    private int weight;

    private int count; //ilosc

    private BigDecimal price; //cena

    public Product(String name, int weight, BigDecimal price, int count) {

    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Product(String name, int weight,  int count, BigDecimal price) {
        this.name = name;
        this.weight = weight;
        this.count = count;
        this.price = price;
    }
}

oraz dodawanie do listy

    public static Product getProduct()
    {
        try
        {
            System.out.println("Podaj nazwę produktu");
            String name = getStringFromSystemIn();
            
            System.out.println("Podaj wagę");
            int weight = getIntFromSystemIn(1,20);

            System.out.println("podaj ilość produktu");
            int count = getIntFromSystemIn(1,200);

            System.out.println("Podaj cenę");
            BigDecimal price = getBigDecimalFromSystemIn(2);





            return new Product(name, weight, count, price);
        }
        catch(Exception e)
        {
            System.err.println(e.getMessage());
            return null;
        }
    }
1

A gdzie to pytanie? bo na razie opisałeś wymagania. Masz z czymś problem? Masz już jakiś kod? To jest ogłoszenie drobne żeby ktoś Ci to napisał za pieniądze?

0
KamilAdam napisał(a):

A gdzie to pytanie? bo na razie opisałeś wymagania. Masz z czymś problem? Masz już jakiś kod? To jest ogłoszenie drobne żeby ktoś Ci to napisał za pieniądze?

Ucięło mi w trakcie, już poprawiony post.

4

Cudów nie ma. Musisz sobie stworzyć klasę Products która wrapuje klasę List i dodać metodę addProduct(Product). A w tej metodzie przed każdym dodanie do listy sprawdzać czy masa wszystkich jest mniejsza niż 100 kg.

BTW
te komentarze wyglądają bardzo niepoważnie:

    private int count; //ilosc

    private BigDecimal price; //cena
2

Kilka formalności

  1. public static Product getProduct() -> wolał był inputProduct() albo coś dalszego od wyglądu "jak getter"
  2. naprawdę potrzebujesz settery w klasie? Ustawianie jedynie z konstruktora jest fajne (to się nazywa immutable)
  3. czy waga to int, miałbym wątpliwości

A gdzie masz próbę dodawania do listy, choćby jeszcze bez kontroli wagi?
Samo zagadnienie ma podobieństwo do problemu plecakowego, choć nie jest to jasne. Masz optymalizować na jak największą wagę łączną, czy tylko przyjmować w sekwencji, aż do "stop" ?

1

Nie dodawaj produktów do gołej ArrayList'y tylko stwórz klasę, np. Order:

    class Order {
        private final List<Product> products;
        private final int maxWeight;
        private int currentWeight;
        
        public Order(final int maxWeight) {
            this.maxWeight = maxWeight;
            this.products = new ArrayList<>();
            this.currentWeight = 0;
        }
        
        public void addProduct(final Product product) throws MaxWeightExceededException {
            int totalWeight = product.getWeight() * product.getCount();
            if (maxWeight < currentWeight + totalWeight) {
                throw new MaxWeightExceededException();
            }

            products.add(product);
            currentWeight += totalWeight;
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1