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

Как лучше доработать код?

19.01.2022, 13:01. Показов 9578. Ответов 1
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! У меня есть рабочий код, все устраивает, НО! Пользователь вводит трату (тип double) и затем пишет категорию (String). Код должен работать так: К определенной категории должны сохраняться соответствующие траты ( на пример: еда - 100.0, 50.5, 120.0 ; Здоровье - 55.9, 30.0 и тд) Я сделала это с помощью мапы и ключей, но при выводе в консоль новая трата почему-то добавляется к каждой категории, а не только в свою по названию. Я уже голову себе сломала, подскажите пожалуйста, как решить данную проблему!
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.util.HashMap;
import java.util.ArrayList;
 
public class ExpensesManager {
    HashMap <String, ArrayList<Double>> expensesByCategories; // Замените на таблицу с именем expensesByCategories
    ArrayList<Double> expenses; 
    
    ExpensesManager() {
        expensesByCategories = new HashMap<>(); // Создайте таблицу
        expenses = new ArrayList<>();
    }
        
        // Добавьте в метод ещё один параметр — category
    double saveExpense(double moneyBeforeSalary, double expense, String category) {
        moneyBeforeSalary = moneyBeforeSalary - expense;
        expensesByCategories.put(category, expenses); 
        System.out.println("Значение сохранено! Ваш текущий баланс в рублях: " + moneyBeforeSalary);
        
        // Замените на работу с таблицей
         if (expensesByCategories.containsKey(category)){ // Проверьте наличие категории
            expensesByCategories.get(category); // Получите список трат в этой категории
            expenses.add(expense);
            System.out.println(expensesByCategories);
             // Добавьте трату
        } else {
            ArrayList<Double> newExpenses = new ArrayList<>();// Создайте новый список трат и добавьте в него сумму
             newExpenses.add(expense);
             expensesByCategories.put(category, newExpenses); // ?
             // Сохраните категорию и новый список трат в хеш-таблицу
             System.out.println(expensesByCategories);
        }
        if (moneyBeforeSalary < 1000) {
            System.out.println("На вашем счету осталось совсем немного. Стоит начать экономить!");
        }
        return moneyBeforeSalary;
    }
    
    
    void printAllExpensesByCategories() { 
                // Замените логику для работы с таблицами
        
        for(String categoryes : expensesByCategories.keySet()){         
            System.out.println(categoryes);
        for (Double list : expensesByCategories.get(categoryes)){
        System.out.println(list);
                 
             }                  
        } 
    }
    
        // Метод должен принимать название категории и называться findMaxExpenseInCategory
    double findMaxExpenseInCategory(String category) {
        double maxExpense = 0;
        /* Замените логику для работы с таблицами
        Если категория есть, то ищем максмальную трату.
        Иначе печатаем "Такой категории пока нет." */
        if(expensesByCategories.containsKey(category)){
            for (Double exp : expenses) {
            if (exp > maxExpense) {
                maxExpense = exp;
            }
            }            
        } else{
             System.out.println("Такой категории пока нет.");            
        }
        return maxExpense;
    }
 
    
 
    void removeAllExpenses() {
        expensesByCategories.clear(); // Таблица называется иначе
        System.out.println("Траты удалены.");
    } 
}

Метод main отправляю, чтобы было понятней меню консоли:

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.Scanner;
 
public class Praktikum {
    public static void main(String[] args) {
 
        Scanner scanner = new Scanner(System.in);
        System.out.println("Сколько денег у вас осталось до зарплаты?");
        double moneyBeforeSalary = scanner.nextDouble();
        System.out.println("Сколько дней до зарплаты?");
        int daysBeforeSalary = scanner.nextInt();
 
        Converter converter = new Converter(78.5, 88.7, 0.75);
        DinnerAdvisor dinnerAdvisor = new DinnerAdvisor();
        ExpensesManager expensesManager = new ExpensesManager();
 
        while (true) {
            printMenu();
            int command = scanner.nextInt();
 
            if (command == 1) {
                System.out.println("Ваши сбережения: " + moneyBeforeSalary + " RUB");
                System.out.println("В какую валюту хотите конвертировать? Доступные варианты: 1 - USD, 2 - EUR, 3 - JPY.");
                int currency = scanner.nextInt();
                converter.convert(moneyBeforeSalary, currency);
            } else if (command == 2) {
                dinnerAdvisor.getAdvice(moneyBeforeSalary, daysBeforeSalary);
            } else if (command == 3) {
                System.out.println("Введите размер траты:");
                double expense = scanner.nextDouble();
                System.out.println("К какой категории относится трата?");
                String category = scanner.next();
                moneyBeforeSalary = expensesManager.saveExpense(moneyBeforeSalary, expense, category);
            } else if (command == 4) {
                expensesManager.printAllExpensesByCategories();
            } else if (command == 5) {
                System.out.println("В какой категории искать?");
                String category = scanner.next();
                System.out.println("Самая большая трата в категории " + category + " составила "
                        + expensesManager.findMaxExpenseInCategory(category) + " руб.");
            } else if (command == 6) {
                expensesManager.removeAllExpenses();
            } else if (command == 0) {
                System.out.println("Выход");
                break;
            } else {
                System.out.println("Извините, такой команды пока нет.");
            }
        }
    }
 
    public static void printMenu() {
        System.out.println("Что вы хотите сделать? ");
        System.out.println("1 - Конвертировать валюту");
        System.out.println("2 - Получить совет");
        System.out.println("3 - Ввести трату");
        System.out.println("4 - Показать траты по категориям");
        System.out.println("5 - Показать самую большую трату в выбранной категории");
        System.out.println("6 - Очистить таблицу трат");
        System.out.println("0 - Выход");
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2022, 13:01
Ответы с готовыми решениями:

Наследование. Как сделать код лучше
Здравствуйте, уважаемые форумчане! Недавно изучаю java, и имею сейчас такую проблему. Задание следующее: сформировать штат сотрудников с...

Jlist, Jpanel, JTextField: как сделать код лучше?
import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*;...

Как лучше доработать условие if is not None python?
Всем привет ! Есть такой кусок кода.Который берет данные из БД для парсинга даты. def...

1
 Аватар для StepFather322
365 / 252 / 113
Регистрация: 07.10.2017
Сообщений: 1,330
19.01.2022, 20:26
Цитата Сообщение от Sofi5 Посмотреть сообщение
expensesByCategories.put(category, expenses);
зачем ты один и тот же лист кладешь для всех категорий?
Цитата Сообщение от Sofi5 Посмотреть сообщение
expensesByCategories.get(category); // Получите список трат в этой категории
            expenses.add(expense);
как думаешь, в какой лист ты добавил значение?

Добавлено через 34 секунды
Цитата Сообщение от Sofi5 Посмотреть сообщение
ArrayList<Double> expenses;
зачем тебе вообще этот лист в поле, если у тебя для каждой категории должен быть свой лист?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2022, 20:26
Помогаю со студенческими работами здесь

Как доработать код?
есть вот такой код: section .data fmt: db &quot;%d&quot;, 10, 0 section .bss s:resd 1 section .text extern...

Как доработать код?
Задание: Определить сумму делителей данного натурального числа используя рекурсивную подпрограмму Есть код, который выводит ДЕЛИТЕЛИ...

Как доработать код?
Разработать функцию number_generator (number, digit, position), которая при вызове принимает три целых числа. number - может быть...

Подскажите как доработать код
Нужно посчитать копейки. от 1-й до 99-ти. Суть в том что бы посчитать в порядке 1-копейка, 2,3,4-копейки, 5-20-копеек, 21-копейка,...

While в Python: объясните как доработать код
Необходимо ввести два числа с условием их равности, причем одно число мы задаем, а с помощью второго пытаемся догадаться каким было первое....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru