Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 45 additions & 1 deletion src/main/java/core/basesyntax/SalaryInfo.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,51 @@
package core.basesyntax;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class SalaryInfo {
private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates the requirement: "If a date formatter is created, it must be a constant field." The formatter should be a static final field, not an instance field.


public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) {
return null;
LocalDate from = LocalDate.parse(dateFrom, dateTimeFormatter);
LocalDate to = LocalDate.parse(dateTo, dateTimeFormatter);
Map<String, Integer> salaryMap = new HashMap<>();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates the requirement: "Do not use HashMap or any other Map." You must use arrays for salary aggregation instead of a Map.


for (String record : data) {
String[] parts = record.split(" ");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This violates the checklist item: "All hardcoded values (magic numbers) must be moved to constants with descriptive names." The indices used for splitting the data line (e.g., parts[0], parts[1], parts[2], parts[3]) should be declared as constants.


LocalDate date = LocalDate.parse(parts[0], dateTimeFormatter);

if (date.isAfter(to) || date.isBefore(from)) {
continue;
}

String name = parts[1];

if (!Arrays.asList(names).contains(name)) {
continue;
}

int hours = Integer.parseInt(parts[2]);
int rate = Integer.parseInt(parts[3]);
int salary = hours * rate;

salaryMap.put(name, salaryMap.getOrDefault(name, 0) + salary);

}

StringBuilder builder = new StringBuilder();
builder.append("Report for period ").append(dateFrom).append(" - ").append(dateTo)
.append(System.lineSeparator());

for (String name : names) {
int totalSalary = salaryMap.getOrDefault(name, 0);
builder.append(name).append(" - ").append(totalSalary).append(System.lineSeparator());
}

return builder.toString().trim();
}
}