Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.12.2021
Сообщений: 54

Как "избавиться" от лишнего класса (пробелы в ООП)

10.06.2022, 15:38. Показов 620. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Сразу понимаю, что данный вопрос это большие пробелы в понимании ООП, но прошу мне помочь, пжлста:
задача в том, что есть три магазина, в конце дня которого сдается касса (то есть должна посчитаться сумма кассы каждого магазина). Хочу реализовать LongAdder для понимания, поскольку сейчас изучаю поточку. Суть в том, что у меня всё работает, однако есть класс Billing, который как бы немного лишний —> у нас уже есть класс AccountService, но я если убираю класс Billing и заношу весь конструктор в AccountService, то цикла for необходимо передать переменную с int'ом магазина (однако она ещё не готова для передачи). Помогите, как можно объединить два класса AccountService и Billing в один класс, дабы не плодить много беспонтовых классов?
PS
Также если проинициализировать AccountService в цикле for, то тоже не получается —> поскольку берет не сумму 3х магазинов, а цифру из последнего магазина.

Рабочий код:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
 
public class Main {
    private static final int THREAD_POOLS = 3;//кол-во магазинов SHOP QUANTITY
 
    public static void main(String[] args) throws InterruptedException {
 
        ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOLS);
        AccountService accountService = new AccountService();
        int min = 10;
        int max = 11;
        for (int i = 0; i < THREAD_POOLS; i++) {
            int numRandom = (int) (Math.random() * (max + 1 - min) + min);
            executorService.execute(() -> accountService.add(new Billing(numRandom)));
        }
        executorService.awaitTermination(3, TimeUnit.SECONDS);
        System.out.println(accountService);
        executorService.shutdown();
    }
}

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
public class Billing {
    private final int sum;
 
    public Billing(int sum) {
        this.sum = sum;
    }
 
    public int getSum(){
        return sum;
    }
}

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.concurrent.atomic.LongAdder;
 
public class AccountService {
//    private final int sum;
//
//
//
//    public AccountService(int sum) {
//        this.sum = sum;
//    }
//
//    public int getSum(){
//        return sum;
//    }
////***************************
    LongAdder longAdder = new LongAdder();
 
    public void add(Billing billing) {
        longAdder.add(billing.getSum());
    }
 
    @Override
    public String toString() {
        return "Total income:" + longAdder.sum();
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2022, 15:38
Ответы с готовыми решениями:

Как избавиться от лишнего блока Bootstrap
Здравствуйте! Для верстки мобильной версии я использую bootstrap 4. Для десктоп версии есть 4 столбца, а для мобильной версии нам...

как избавиться от лишнего слеша в браузере
http://localhost:36795/WebForm1.aspx?are=MySub/Sub//ыы//уцуцу/ здесь идет лишний слеш как быть помогите очень надо string ff =...

Как избавиться от лишнего столбца на странице ASP?
При отображении таблицы на странице ASP справа появляется пустой столбец, равный по размеру всем столбцам таблицы вместе взятых. Как...

3
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
10.06.2022, 16:17
Billing -> Integer, AccountService -> AtomicLong.
1
0 / 0 / 0
Регистрация: 07.12.2021
Сообщений: 54
11.06.2022, 04:49  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
illing -> Integer, AccountService -> AtomicLong.
Не совсем понимаю. Можете, пожалуйста, по конкретней?

Я сделал, это так (но мб действительно есть более лучший вариант в AtomicLong)
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
 
public class Main {
    private static final int THREAD_POOLS = 3; //кол-во магазинов SHOP QUANTITY
 
    public static void main(String[] args) throws InterruptedException {
 
        ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOLS);
        AccountService accountService = new AccountService(0);
        int min = 10;
        int max = 10;
        for (int i = 0; i < THREAD_POOLS; i++) {
            int numRandom = (int) (Math.random() * (max + 1 - min) + min);
            executorService.execute(() -> accountService.add(new AccountService(numRandom)));
        }
        executorService.awaitTermination(3, TimeUnit.SECONDS);
        System.out.println(accountService);
        executorService.shutdown();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.concurrent.atomic.LongAdder;
 
public class AccountService {
    private final int sum;
 
 
    public AccountService(int sum) {
        this.sum = sum;
    }
 
    public int getSum(){
        return sum;
    }
 
    LongAdder longAdder = new LongAdder();
 
    public void add(AccountService accountService) {
        longAdder.add(accountService.getSum());
    }
 
    @Override
    public String toString() {
        return "Total income:" + longAdder.sum();
    }
}
0
0 / 0 / 0
Регистрация: 07.12.2021
Сообщений: 54
11.06.2022, 12:24  [ТС]
Я решил с AtomicLong (но по факту тоже самое получилось))
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
 
public class Main {
    private static final int THREAD_POOLS = 3; //кол-во магазинов SHOP QUANTITY
 
    public static void main(String[] args) throws InterruptedException {
 
        ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOLS);
        AccountService accountService = new AccountService(0);
        int min = 10;
        int max = 10;
        for (int i = 0; i < THREAD_POOLS; i++) {
            int numRandom = (int) (Math.random() * (max + 1 - min) + min);
            executorService.submit(()->accountService.atomicLong.addAndGet(numRandom));
         //   executorService.execute(() -> accountService(new AccountService(numRandom)));
        }
        executorService.awaitTermination(3, TimeUnit.SECONDS);
        System.out.println(accountService);
        executorService.shutdown();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;
 
public class AccountService {
    private int result;
//    private final int sum;
 
    public AccountService(int sum) {
//        this.sum = sum;
        this.result = sum;
    }
 
    public int getSum() {
//        return sum;
        return result;
    }
 
    AtomicLong atomicLong = new AtomicLong();
    LongAdder longAdder = new LongAdder();
 
    public void add(AccountService accountService) {
        atomicLong.addAndGet(getSum());
//        longAdder.add(accountService.getSum());
    }
 
    @Override
    public String toString() {
        return /*"Total income:" + longAdder.sum() +*/
                "\n Total#2 income: " + atomicLong.addAndGet(result);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.06.2022, 12:24
Помогаю со студенческими работами здесь

Как избавиться от лишнего тега и изменить префикс пространства имен?
Здравствуйте. Пытаюсь разобраться с WCF есть классы public class GetMyServiceResponse { private...

Избавиться от лишнего ключа в JSON
Я написал класс для перевода текста. То есть берётся определённая пара ключ-значение из файла, и если такая строка существует, то она...

Избавиться от лишнего '\n' при получении названия переменной
Добрый день, вот код, когда срабатывает первый scanf, он получает 2 символа: буква и '\n'. И из-за этого в цикле мы записываем '\n' в...

ООП или как избавиться от switch -case
Нужен совет, есть порядка 20 методов, которые по сути принимают ввод с клавиатуры, и делают они разные вещи, считают, сортируют,...

Подскажите как избавиться от ошибок header, убирал пробелы, переводы срок, делал файл в utf-8 без BOM и многое другое
Здравствуйте, Уважаемые друзья! проблема такая... есть 3 файла 1) config.php ( подключение к БД) 2) CODE.php (Функции для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru