В ТЗ пункт - "2. Метод printStudents должен выводить всех студентов (имя и фамилия) из коллекции grades с новой строки."
> Имя и фамилия.
Смотрим исходный код задачи:
grades.put("Давыдов Олег", 4.3d);
grades.put("Шульга Николай", 4.1d);
grades.put("Колос Василий", 4.9d);
grades.put("Шевченко Тарас", 3.7d);
grades.put("Марчук Любослав", 3.2d);
наблюдаем очевидную картину, что в ключе идет сначала фамилия, потом имя.
Делаем логичный вывод, необходимо не просто написать sout для каждого ключа, а реверснуть ключ так, чтобы сначала шло имя.
Пишем мотню кода:
public static void printStudents()
{
ArrayList<String> namesUnsorted = new ArrayList<String>();
ArrayList<String> namesSorted = new ArrayList<String>();
for (String key : grades.keySet())
{
namesUnsorted.add(key);
}
for (String name : namesUnsorted)
{
int index = name.indexOf(' ');
String firstName = name.substring(index + 1);
String secondName = name.substring(0, index);
namesSorted.add(firstName + " " + secondName);
}
int count = 0;
for (String key : grades.keySet())
{
System.out.println(namesSorted.get(count));
count++;
}
}
И что получаем? Правильно, получаем "Задача не прошла тестирование"
Далее, ломаем всю голову на темы:
"Да что этому ссутулому валидатору от меня надо?"
"Может он хочет чтобы я работал напрямую с мапой, не прибегая к созданию коллекций-копий? Но это же жесть!"
и т.д.
Окончательно сдавшись, лезем проверять решение задачи у других юзеров. И что мы видим? Мы видим это чудо:
for (String name : grades.keySet())
{
System.out.println(name);
}
Думаем "Да не, не могли они так ошибиться"
Думаем еще "Стопудово не может так работать, у них в задачах обычно ТЗ очень внимательно надо читать, в них заковырки"
Не верим, но пробуем скопировать.
> "Задача успешно прошла тестирование!"
Медленно теряем рассудок.
Михаил Корнеев
20 уровень
Кратко о том как НЕ НАДО писать ТЗ.
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ulukay
28 июля 2023, 12:42
хех
0
Денис Enterprise Java Developer
25 апреля 2023, 14:49
Мне почему-то кажется, что и Олег Давыдов и Давыдов Олег это имя и фамилия. Ведь не идёт чёткого указания на то какой порядок должен быть, речь идёт только о вхождении.
0
Anton Nechunaev
25 апреля 2023, 14:14
Вообще можно ещё проще
System.out.println(grades.keySet());
меньше сторк кода = лучше
Даже не совсем понял, что тебя смутило, мб что нужно выводить с новой строки, но речь не о каждом студенте, а о том, что в целом их список нужно вывести с новой строки.
0
Роман Rime
2 августа 2023, 08:12
Его смутило, что в задании указано "Имя Фамилия", а по факту выводится "Фамилия Имя".
0