Maksymalna sumaryczna wartość dodana do ArrayList

Maksymalna sumaryczna wartość dodana do ArrayList
P1
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:4
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

Kopiuj
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

Kopiuj
    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;
        }
    }
edytowany 1x, ostatnio: patrykk1797
AK
Jak "dodajesz", jeśli naprawdę, to pokaż ten kod.
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:5 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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?


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
P1
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:4
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.

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:5 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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:

Kopiuj
    private int count; //ilosc

    private BigDecimal price; //cena

Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam
UglyMan
Kiedyś pracowałem z taki jednym co kochał takie komentarze. Potem było 3 razy tyle komentarzy (nic nie wnoszących) co kodu.
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:3561
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" ?


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 2x, ostatnio: AnyKtokolwiek
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 godziny
  • Postów:3606
1

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

Kopiuj
    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;
        }
    }
edytowany 1x, ostatnio: wartek01

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.