Второй день ломаю голову, почему данный код не правильно суммирует данные из values? (Строка 41-53)
package com.javarush.task.task19.task1920;
/*
Самый богатый
В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя значение
где [имя] — String, [значение] — double. [имя] и [значение] разделены пробелом.
Для каждого имени посчитать сумму всех его значений.
Вывести в консоль имена в алфавитном порядке, у которых максимальная сумма.
Имена разделять пробелом либо выводить с новой строки.
Закрыть потоки.
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
//String fileName = args[0];
String fileName = "/Volumes/Umberella/Test.txt";
BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
ArrayList<String> names = new ArrayList<String>();
ArrayList<Double> values = new ArrayList<Double>();
Map<String, Double> map = new HashMap<String, Double>();
String strRd;
String[] strBuff;
while ((strRd = fileReader.readLine()) != null){
strBuff = strRd.split(" ");
names.add(strBuff[0]);
values.add(Double.parseDouble(strBuff[1]));
}
fileReader.close();
double valueCount = 0;
for (int i = 0; i < names.size(); i++){
String checkName = names.get(i);
valueCount = values.get(i);
for (int o = 1; o < names.size(); o++){
if (checkName.equals(names.get(o))) {
valueCount = valueCount + values.get(o);
names.remove(o);
values.remove(o);
}
}
map.put(checkName, valueCount);
}
Iterator<Map.Entry<String, Double>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<String, Double> pair = iterator.next();
String key = pair.getKey();
Double val = pair.getValue();
System.out.println("Key: " + key + ", Value: " + val);
}
}
}
Содержимое файла:
Петров 0.501
Иванов 1.35
Петров 0.85
Иванов 1.0
Вася 1.0
Вася 1.76
Результат выдачи:
Key: Вася, Value: 2.0
Key: Иванов, Value: 2.7
Key: Петров, Value: 1.351