Вывод данных в график - Java

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток всем! Пользуясь инструкцией, в целях самообразования пишу для себя простенький инструмент по учету финансов (на конкретных задачах мне проще усвоить материал). Столкнулся со следующим затыком. Код ниже выводит график по целям транзакций, однако не суммирует по каждой цели, а вытягивает только последнее значение.. Прошу указать, к какую сторону копать, а то своих навыков не хватает з.ы. если нужно больше кода - выложу.
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.XYChart;
import main.all.content.model.Check;
 
import java.util.Arrays;
import java.util.List;
 
public class CheckDateStatisticsController {
 
    @FXML
    private BarChart<String, Double> barChart;
 
    @FXML
    private CategoryAxis xAxis;
 
    private ObservableList<String> targetNames = FXCollections.observableArrayList();
 
    private String[] targets = {
            /*0*/"Бытовая техника",
            /*1*/"Бытовая химия",
            /*2*/"Зарплата (включая аванс)",
            /*3*/"Зачисление наличных на карту",
            /*5*/"Здоровье/медикаменты",
            /*6*/"Интернет",
            /*7*/"Коммунальные платежи",
            /*8*/"Косметика/парфюмерия",
            /*9*/"Кредиты",
            /*10*/"Ломбард",
            /*11*/"Образование",
            /*12*/"Отдых/развлечения",
            /*13*/"Перевод",
            /*14*/"Подарки/сувениры",
            /*15*/"Продукты питания",
            /*16*/"Прочие доходы",
            /*17*/"Прочие расходы",
            /*18*/"Ремонт",
            /*19*/"Снятие наличных с карты",
            /*20*/"Связь",
            /*21*/"Транспорт"};
 
    /**
     * Инициализирует класс контроллера.
     * Этот метод вызывается автоматически после того как файл FXML был загружен.
     */
    @FXML
   private void initialize() {
        // Получаем массив с именами целей.
 
        // Преобразуем его в список и добавляем ObservableList целей.
        targetNames.addAll(Arrays.asList(targets));
 
        // Связываем целевые имена, как категории для горизонтальной оси.
        xAxis.setCategories(targetNames);
    }
 
    public void setCheckData(List<Check> checks) {
        XYChart.Series<String, Double> series = new XYChart.Series<>();
 
        for (Check c : checks) {
            for (int i = 0; i < checks.size(); i++) {
                series.getData().add(new XYChart.Data<>(c.getTarget(), c.getSum()));
            }
        }
        barChart.getData().add(series);
    }
}

Решение задачи: «Вывод данных в график»

textual
Листинг программы
package main.all.content.view;
 
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.XYChart;
import main.all.content.model.Check;
 
import java.util.*;
 
public class CheckDateStatisticsController {
 
    @FXML
    private BarChart<String, Double> barChart;
 
    @FXML
    private CategoryAxis xAxis;
 
    private ObservableList<String> targetNames = FXCollections.observableArrayList();
 
    private ObservableList<Check> checkData = FXCollections.observableArrayList();
 
    private String[] targets = {
            /*0*/"Бытовая техника(-)",
            /*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*/"Хобби(-)"};
 
    @FXML
    private void initialize() {
        targetNames.addAll(Arrays.asList(targets));
        xAxis.setCategories(targetNames);
    }
 
    public void setCheckData(List<Check> checks) {
        XYChart.Series<String, Double> series = new XYChart.Series<>();
 
        Map<String, Integer> trgts = new HashMap<String, Integer>();
        checkData.addAll(checks);
 
        ArrayList<String> targetArray = new ArrayList<String>();
        ArrayList<Double> sumArray = new ArrayList<Double>();
 
        for (int k = 0; k < checkData.size(); k++) {
            targetArray.add(checkData.get(k).getTarget());
            sumArray.add(checks.get(k).getSum());
        }
 
        for (int j = 0; j < targetArray.size(); j++) {
            String tempString = targetArray.get(j);
 
            if (!trgts.containsKey(tempString)) {
                trgts.put(tempString, 1);
            } else {
                trgts.put(tempString, trgts.get(tempString) + 1);
            }
        }
 
        for (Map.Entry<String, Integer> entry : trgts.entrySet()) {
 
            ArrayList<Double> sumArr = new ArrayList<Double>();
 
            for(int i=0; i<checkData.size(); i++) {
                if (checkData.get(i).getTarget().equals(entry.getKey())) {
                    sumArr.add(checkData.get(i).getSum());
                }
            }
 
            double totSum = 0;
 
            for(int j=0; j<sumArr.size(); j++) {
                totSum=totSum+sumArr.get(j);
            }
            series.getData().add(new XYChart.Data<>(entry.getKey(), totSum));
        }
        barChart.getData().add(series);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы