Коллеги проконсультируйте
1. Что не так в моем решении. Вроде уже много чего переделал, и информации перечитал. У меня на компьютере все работает правильно. А валидатор сообщает об ошибке.
2 Может я не качественные тесты пишу? Может тестировать надо как то по другому? Есть какая то информация по этой теме?
файл на котором я тестирую содержит:
Петров 2
Сидоров 6
Иванов 1.35
Петров 3.1
МЁ 6
МЙ 6
абвгдеёжзийклмнопрстуфхцчшщыьъэюя 1.35
package com.javarush.task.task19.task1919;
/*
Считаем зарплаты
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader(args[0]);
BufferedReader fileReader = new BufferedReader(fr);
TreeMap<String, Double> map = getTreeMap(fileReader);
ArrayList<Double> sortListVal = getSortListVal(map);
for (Double val : sortListVal) {
for (Map.Entry<String,Double> entry : map.entrySet()) {
if ((val - entry.getValue()) == 0.0) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
}
private static TreeMap<String, Double> getTreeMap(BufferedReader fileReader) throws IOException {
TreeMap<String, Double> map = new TreeMap<>();
String line;
Double num = 0d;
String name = "";
Pattern patNum = Pattern.compile("\\d+.?\\d*");
Pattern patName = Pattern.compile("[a-zA-Zа-я]+");
while (fileReader.ready()) {
line = fileReader.readLine();
Matcher matchNum = patNum.matcher(line);
if (matchNum.find()) {
num = Double.valueOf(line.substring(matchNum.start(), matchNum.end()));
name = line.substring(0, matchNum.start()-1);
}
if (map.containsKey(name)) {
Double increment = map.get(name) + num;
map.put(name, increment);
} else {
map.put(name, num);
}
}
fileReader.close();
return map;
}
private static ArrayList<Double> getSortListVal(TreeMap<String, Double> map) {
Set<Double> listVal = new HashSet<>();
for (Map.Entry<String, Double> entry : map.entrySet()) {
listVal.add(entry.getValue());
}
ArrayList<Double> sortListVal = new ArrayList<>();
Double tempNum = Double.MIN_VALUE;
for (int i = 0; i < listVal.size(); i++) {
Double min = Double.MAX_VALUE;
for (Double num : listVal) {
if (min > num && tempNum < num) {
min = num;
}
}
sortListVal.add(min);
tempNum = min;
}
return sortListVal;
}
}