Skip to content

Latest commit

 

History

History
95 lines (77 loc) · 4.21 KB

File metadata and controls

95 lines (77 loc) · 4.21 KB

Домашнее задание к занятию SOLID

Перед вами код программы, напоминающий по функционалу домашнее задание на одномерные массивы про магазин.

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        HashMap<String, Integer> products = new HashMap<>();
        products.put("Хлеб", 56);
        products.put("Масло", 153);
        products.put("Колбаса", 211);
        products.put("Пирожок", 45);

        System.out.println("В МАГАЗИНЕ В НАЛИЧИИ");
        for (Map.Entry<String, Integer> productAndPrice : products.entrySet()) {
            System.out.println(productAndPrice.getKey() + " за " + productAndPrice.getValue() + " руб./шт.");
        }

        System.out.println("Введите два слова: название товара и количество. Или end");
        Scanner scanner = new Scanner(System.in);
        Purchase purchase = new Purchase();
        while (true) {
            String line = scanner.nextLine();
            if ("end".equals(line)) break;
            String[] parts = line.split(" ");
            String product = parts[0];
            int count = Integer.parseInt(parts[1]);
            purchase.addPurchase(product, count);
        }
        long sum = purchase.sum(products);
        System.out.println("ИТОГО: " + sum);
    }
}

и вспомогательный класс:

import java.util.Map;

public class Purchase {
    protected String title;
    protected int count;
    protected Purchase[] purchases = new Purchase[4];

    public Purchase(String title, int count) {
        this.title = title;
        this.count = count;
    }

    public Purchase() {
    }

    public void addPurchase(String title, int count) {
        for (int i = 0; i < purchases.length; i++) {
            if (purchases[i] == null) {
                purchases[i] = new Purchase(title, count);
                return;
            }
            if (purchases[i].title.equals(title)) {
                purchases[i].count += count;
                return;
            }
        }
    }

    public long sum(Map<String, Integer> prices) {
        long sum = 0;
        System.out.println("КОРЗИНА:");
        for (int i = 0; i < purchases.length; i++) {
            Purchase purchase = purchases[i];
            if (purchase == null) continue;
            System.out.println("\t" + purchase.title + " " + purchase.count + " шт. в сумме " + (purchase.count * prices.get(purchase.title)) + " руб.");
            sum += purchase.count * prices.get(purchase.title);
        }
        return sum;
    }
}

Как можно заметить, отличие прежде всего в том, что пользователь теперь вводит не номер товара, а его название, а также что в реализации используется хешмапа.

Этот код специально напиан с нарушением некоторых базовых принципов, рассмотренных на занятии.

Ваша задача - понять чужой код без подробных комментариев, найти эти нарушения и исправить. Это то, что часто встречается в задачах в коммерческой разработке.

В качестве решения должна быть ссылка на репозиторий с двумя (или более) классами в исправленном варианте.

ВАЖНО: Кроме этого в комментарии к решению следует описать, какие конкретно были нарушения, где находились и в чём состояло ваше исправление.

Переписать всё с нуля или полностью изменить логику реализации программы считаться исправлением недочётов существующей программы не будет.