From 82ddb4bf479b7e0a9d2fb39fbe6d30a93e4190a7 Mon Sep 17 00:00:00 2001 From: Kostya Omelchenko Date: Thu, 9 May 2024 21:40:10 +0200 Subject: [PATCH 1/2] solution --- src/main/java/core/basesyntax/SalaryInfo.java | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 4a34339b5..1a229390b 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -2,6 +2,59 @@ public class SalaryInfo { public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { - return null; + int[] dateFromArr = getDateInArrayIntegerFormat(dateFrom); + int[] dateToArr = getDateInArrayIntegerFormat(dateTo); + + StringBuilder outputBuilder = new StringBuilder( + "Report for period " + dateFrom + " - " + dateTo); + + for (String name : names) { + int salaryCounter = 0; + outputBuilder.append("\n"); + + for (String info : data) { + String[] infoArr = info.split(" "); + + if (infoArr[1].equals(name)) { + int[] dateEmploy = getDateInArrayIntegerFormat(infoArr[0]); + + if (workingUpToDate(dateEmploy, dateFromArr, dateToArr)) { + salaryCounter += Integer.parseInt(infoArr[2]) + * Integer.parseInt(infoArr[3]); + } + } + } + + outputBuilder + .append(name) + .append(" - ") + .append(salaryCounter); + } + + return outputBuilder.toString(); + } + + private int[] getDateInArrayIntegerFormat(String date) { + int[] dateInArrayInteger = new int[3]; + String[] dateInArrayString = date.split("\\."); + + for (int i = 0; i < dateInArrayInteger.length; i++) { + dateInArrayInteger[i] = Integer.parseInt(dateInArrayString[i]); + } + + return dateInArrayInteger; + } + + private boolean workingUpToDate(int[] dateEmploy, int[] dateSalaryFrom, int[] dateSalaryTo) { + if (dateEmploy[2] >= dateSalaryFrom[2] && dateEmploy[2] <= dateSalaryTo[2]) { + if (dateEmploy[1] >= dateSalaryFrom[1] && dateEmploy[1] <= dateSalaryTo[1]) { + return !(dateEmploy[1] == dateSalaryFrom[1] + && dateEmploy[0] < dateSalaryFrom[0]) + && !(dateEmploy[1] == dateSalaryTo[1] + && dateEmploy[0] > dateSalaryTo[0]); + } + } + + return false; } } From 49e8e662fc998ccf019cb5ecf89fa3c76df8eb14 Mon Sep 17 00:00:00 2001 From: Kostya Omelchenko Date: Thu, 16 May 2024 16:47:46 +0200 Subject: [PATCH 2/2] solution improved --- src/main/java/core/basesyntax/SalaryInfo.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 1a229390b..a99a73bcf 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -1,6 +1,10 @@ package core.basesyntax; public class SalaryInfo { + private static final int YEAR_INDEX = 2; + private static final int MONTH_INDEX = 1; + private static final int DAY_INDEX = 0; + public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { int[] dateFromArr = getDateInArrayIntegerFormat(dateFrom); int[] dateToArr = getDateInArrayIntegerFormat(dateTo); @@ -45,13 +49,15 @@ private int[] getDateInArrayIntegerFormat(String date) { return dateInArrayInteger; } - private boolean workingUpToDate(int[] dateEmploy, int[] dateSalaryFrom, int[] dateSalaryTo) { - if (dateEmploy[2] >= dateSalaryFrom[2] && dateEmploy[2] <= dateSalaryTo[2]) { - if (dateEmploy[1] >= dateSalaryFrom[1] && dateEmploy[1] <= dateSalaryTo[1]) { - return !(dateEmploy[1] == dateSalaryFrom[1] - && dateEmploy[0] < dateSalaryFrom[0]) - && !(dateEmploy[1] == dateSalaryTo[1] - && dateEmploy[0] > dateSalaryTo[0]); + private boolean workingUpToDate(int[] dateOfWork, int[] dateSalaryFrom, int[] dateSalaryTo) { + if (dateOfWork[YEAR_INDEX] >= dateSalaryFrom[YEAR_INDEX] + && dateOfWork[YEAR_INDEX] <= dateSalaryTo[YEAR_INDEX]) { + if (dateOfWork[MONTH_INDEX] >= dateSalaryFrom[MONTH_INDEX] + && dateOfWork[MONTH_INDEX] <= dateSalaryTo[MONTH_INDEX]) { + return !(dateOfWork[MONTH_INDEX] == dateSalaryFrom[MONTH_INDEX] + && dateOfWork[DAY_INDEX] < dateSalaryFrom[DAY_INDEX]) + && !(dateOfWork[MONTH_INDEX] == dateSalaryTo[MONTH_INDEX] + && dateOfWork[DAY_INDEX] > dateSalaryTo[DAY_INDEX]); } }