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

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

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

Доброго времени суток всем! Пользуясь инструкцией, в целях самообразования пишу для себя простенький инструмент по учету финансов (на конкретных задачах мне проще усвоить материал). Столкнулся со следующим затыком. Код ниже выводит график по целям транзакций, однако не суммирует по каждой цели, а вытягивает только последнее значение.. Прошу указать, к какую сторону копать, а то своих навыков не хватает з.ы. если нужно больше кода - выложу.
Листинг программы
  1. import javafx.collections.FXCollections;
  2. import javafx.collections.ObservableList;
  3. import javafx.fxml.FXML;
  4. import javafx.scene.chart.BarChart;
  5. import javafx.scene.chart.CategoryAxis;
  6. import javafx.scene.chart.XYChart;
  7. import main.all.content.model.Check;
  8. import java.util.Arrays;
  9. import java.util.List;
  10. public class CheckDateStatisticsController {
  11. @FXML
  12. private BarChart<String, Double> barChart;
  13. @FXML
  14. private CategoryAxis xAxis;
  15. private ObservableList<String> targetNames = FXCollections.observableArrayList();
  16. private String[] targets = {
  17. /*0*/"Бытовая техника",
  18. /*1*/"Бытовая химия",
  19. /*2*/"Зарплата (включая аванс)",
  20. /*3*/"Зачисление наличных на карту",
  21. /*5*/"Здоровье/медикаменты",
  22. /*6*/"Интернет",
  23. /*7*/"Коммунальные платежи",
  24. /*8*/"Косметика/парфюмерия",
  25. /*9*/"Кредиты",
  26. /*10*/"Ломбард",
  27. /*11*/"Образование",
  28. /*12*/"Отдых/развлечения",
  29. /*13*/"Перевод",
  30. /*14*/"Подарки/сувениры",
  31. /*15*/"Продукты питания",
  32. /*16*/"Прочие доходы",
  33. /*17*/"Прочие расходы",
  34. /*18*/"Ремонт",
  35. /*19*/"Снятие наличных с карты",
  36. /*20*/"Связь",
  37. /*21*/"Транспорт"};
  38. /**
  39. * Инициализирует класс контроллера.
  40. * Этот метод вызывается автоматически после того как файл FXML был загружен.
  41. */
  42. @FXML
  43. private void initialize() {
  44. // Получаем массив с именами целей.
  45. // Преобразуем его в список и добавляем ObservableList целей.
  46. targetNames.addAll(Arrays.asList(targets));
  47. // Связываем целевые имена, как категории для горизонтальной оси.
  48. xAxis.setCategories(targetNames);
  49. }
  50. public void setCheckData(List<Check> checks) {
  51. XYChart.Series<String, Double> series = new XYChart.Series<>();
  52. for (Check c : checks) {
  53. for (int i = 0; i < checks.size(); i++) {
  54. series.getData().add(new XYChart.Data<>(c.getTarget(), c.getSum()));
  55. }
  56. }
  57. barChart.getData().add(series);
  58. }
  59. }

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

textual
Листинг программы
  1. package main.all.content.view;
  2.  
  3. import javafx.collections.FXCollections;
  4. import javafx.collections.ObservableList;
  5. import javafx.fxml.FXML;
  6. import javafx.scene.chart.BarChart;
  7. import javafx.scene.chart.CategoryAxis;
  8. import javafx.scene.chart.XYChart;
  9. import main.all.content.model.Check;
  10.  
  11. import java.util.*;
  12.  
  13. public class CheckDateStatisticsController {
  14.  
  15.     @FXML
  16.     private BarChart<String, Double> barChart;
  17.  
  18.     @FXML
  19.     private CategoryAxis xAxis;
  20.  
  21.     private ObservableList<String> targetNames = FXCollections.observableArrayList();
  22.  
  23.     private ObservableList<Check> checkData = FXCollections.observableArrayList();
  24.  
  25.     private String[] targets = {
  26.             /*0*/"Бытовая техника(-)",
  27.             /*1*/"Бытовая химия(-)",
  28.             /*2*/"Гигиена(-)",
  29.             /*3*/"Займ(+)",
  30.             /*4*/"Зарплата (включая аванс)(+)",
  31.             /*5*/"Зачисление наличных на карту(↑)",
  32.             /*6*/"Здоровье/медикаменты(-)",
  33.             /*7*/"Зоо(-)",
  34.             /*8*/"Интернет(-)",
  35.             /*9*/"Коммунальные платежи(-)",
  36.             /*10*/"Косметика/парфюмерия(-)",
  37.             /*11*/"Кредиты(-)",
  38.             /*12*/"Ломбард(-)",
  39.             /*13*/"Образование(-)",
  40.             /*14*/"Отдых/развлечения(-)",
  41.             /*15*/"Перевод(-)",
  42.             /*16*/"Погашение займа(-)",
  43.             /*17*/"Подарки/сувениры(-)",
  44.             /*18*/"Продукты питания(-)",
  45.             /*19*/"Прочие доходы(+)",
  46.             /*20*/"Прочие расходы(-)",
  47.             /*21*/"Ремонт(-)",
  48.             /*22*/"Снятие наличных с карты(↓)",
  49.             /*23*/"Связь(-)",
  50.             /*24*/"Транспорт(-)",
  51.             /*25*/"Хобби(-)"};
  52.  
  53.     @FXML
  54.     private void initialize() {
  55.         targetNames.addAll(Arrays.asList(targets));
  56.         xAxis.setCategories(targetNames);
  57.     }
  58.  
  59.     public void setCheckData(List<Check> checks) {
  60.         XYChart.Series<String, Double> series = new XYChart.Series<>();
  61.  
  62.         Map<String, Integer> trgts = new HashMap<String, Integer>();
  63.         checkData.addAll(checks);
  64.  
  65.         ArrayList<String> targetArray = new ArrayList<String>();
  66.         ArrayList<Double> sumArray = new ArrayList<Double>();
  67.  
  68.         for (int k = 0; k < checkData.size(); k++) {
  69.             targetArray.add(checkData.get(k).getTarget());
  70.             sumArray.add(checks.get(k).getSum());
  71.         }
  72.  
  73.         for (int j = 0; j < targetArray.size(); j++) {
  74.             String tempString = targetArray.get(j);
  75.  
  76.             if (!trgts.containsKey(tempString)) {
  77.                 trgts.put(tempString, 1);
  78.             } else {
  79.                 trgts.put(tempString, trgts.get(tempString) + 1);
  80.             }
  81.         }
  82.  
  83.         for (Map.Entry<String, Integer> entry : trgts.entrySet()) {
  84.  
  85.             ArrayList<Double> sumArr = new ArrayList<Double>();
  86.  
  87.             for(int i=0; i<checkData.size(); i++) {
  88.                 if (checkData.get(i).getTarget().equals(entry.getKey())) {
  89.                     sumArr.add(checkData.get(i).getSum());
  90.                 }
  91.             }
  92.  
  93.             double totSum = 0;
  94.  
  95.             for(int j=0; j<sumArr.size(); j++) {
  96.                 totSum=totSum+sumArr.get(j);
  97.             }
  98.             series.getData().add(new XYChart.Data<>(entry.getKey(), totSum));
  99.         }
  100.         barChart.getData().add(series);
  101.     }
  102. }

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


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

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

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы