Доброго времени суток!
То ли лыжи не едут, то ли я... головой тронулся. Или я чего-то не до конца понимаю в логике Java.
Задачу знаю как решить до конца, вопрос в другом - почему при таком коде в консоле я вижу:
![]()
[Petrov 10.11, Ivanov 20.10, Petrov 20.01, Ivanov 10.02] - прочитанные строки из файла
[10.11, 20.1, 20.01, 10.02] - отдельно числа
[Petrov, Ivanov, Petrov, Ivanov] - отдельно имена
{Petrov=30.119999, Ivanov=30.12} - мар из имен и сумм чисел
WTF?!
Откуда берется 30.119999!? Причем это уже, однако, третий или четвертый вариант поиска чисел. Пробовал и тип Double вместо Float. Там все еще интереснее. В одном из вариантов суммы оказались посчитаны верно, но при выводе в консоль, например условие 20 ==20 - False!package com.javarush.task.task19.task1920;
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 Exception {
FileReader fr = new FileReader(args[0]);
BufferedReader buf = new BufferedReader(fr);
List<Float> numberFloat = new ArrayList<>();
List<String> listStr = new ArrayList<>();
List<String> listName = new ArrayList<>();
Set<String> setName = new HashSet<>();
Map<String, Float> mapSum = new HashMap<>();
List<String> listResultAlphabet = new ArrayList<>();
while (buf.ready()) {
listStr.add(buf.readLine());
}
buf.close();
fr.close();
System.out.println(listStr + " - прочитанные строки из файла");
for (int i =0; i < listStr.size(); i++) {
listName.add(listStr.get(i).substring(0,(listStr.get(i).indexOf(" "))));
Pattern pat=Pattern.compile("[0-9]+(.[0-9]?)+[0-9]?");
Matcher matcher=pat.matcher(listStr.get(i));
while (matcher.find()) {
numberFloat.add(Float.parseFloat(matcher.group()));
}
}
for (int i = 0; i < listName.size(); i++)
setName.add(listName.get(i));
for (String sonameTemp : setName) {
Float sum = 0.0F;
for(int i =0; i < listName.size(); i++) {
String str = listName.get(i);
if(str.indexOf(sonameTemp) != -1) sum = sum + numberFloat.get(i);
}
mapSum.put(sonameTemp, sum);
}
System.out.println(numberFloat + " - отдельно числа");
System.out.println(listName + " - отдельно имена");
System.out.println(mapSum + " - мар из имен и сумм чисел");
System.out.println("WTF?!");
}
}