Почему метод выбрасывает ошибку?
Решаю задачу на степике. Gри вводе решения платформа выдает ошибку: Неожиданное исключение: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1. Не понимаю, почему так происходит? Можете подсказать, что делаю не так?
Условие задачи: Магазину нужно сохранять информацию о продажах для каждого сотрудника. Напишите метод Map getSalesMap(Reader reader) который принимает Reader содержащий строки вида:
Алексей 3000 Дмитрий 9000 Антон 3000 Алексей 7000 Антон 8000. Метод должен получить все строки из Readera и заполнить и вернуть карту где ключом будет имя сотрудника, а значением сумма всех его продаж.
public class Sales {
public static Map<String, Long> getSalesMap(Reader reader) throws IOException {
Map<String, Long> map = new HashMap<>();
int fromReader = reader.read();
String line = String.valueOf(fromReader);
while(line != null) {
String name = line.trim().split(" ")[0];
Long salary = Long.parseLong(line.trim().split(" ")[1]);
if (map.containsKey(name)) {
map.put(name, map.get(name) + salary);
} else {
map.put(name, salary);
}
}
return map;
}
}
Ответы (1 шт):
Неправильно работаете с Reader. Метод read согласно документации вычитывает только первый символ. Используйте, например, BufferedReader, чтобы считывать данные построчно:
BufferedReader br = new BufferedReader(reader);
String line = br.readLine();
В вашем случае будет удобно воспользоваться классом Scanner для считывания данных, например:
Scanner scanner = new Scanner(reader);
String name = scanner.next();
long salary = scanner.nextLong();