public static int getCountTheSameFirstName(Map<String, String> map, String name) {
//напишите тут ваш код
int count = 0;
for(String str : map.values()){
if(str.equals(name)){
count++;
}
}
return count;
}
Пытался решить разными способами, потратив кучу времени так и не смог. Решил посмотреть решение, чтоб разобраться с его логикой, но не понял откуда и что содержит String name. Может я пропустил какой-то материал по этому поводу или его вообще не было, но хочется разобраться, чтоб впредь
знать и пользоваться самому.
Alexander Blinov
24 уровень
Не понимаю, как работает String name, откуда берётся, что конкретно содержит в себе. Может кто-то сможет доходчиво объяснить, привести примеры или скинуть ссылки на какие-то дополнительные материалы по этому поводу.
Решен
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
АнтонExpert
11 марта 2023, 14:03
String name - это то, что приходит в метод
и если в мапе значение совпадает с тем, что пришло в string name , то счетчик обновляется .
допустим String name = "Hello"
и если в мапе есть значение "Hello" , тогда счетчик обновится.
0
Alexander BlinovExpert
11 марта 2023, 14:28
Что оно приходит в метод я понял, просто откуда оно берётся, как понимает, какие значения в себя взять, ведь оно меняет в себе значение каждую итерацию цикла, на сколько я понимаю, или я что-то путаю?
0
АнтонExpert
11 марта 2023, 14:33
попробуй вызвать этот метод
ты сам это значение устанавливаешь
т.е ты присваиваешь полю name - какое-то значение,а потом ищешь совпадения значений в map
каждая итерация цикла проходится по значению в map
0
Alexander BlinovExpert
11 марта 2023, 14:52
Конкретно в этой задаче, я понимаю, что в переменную String name передаётся значение Value поочерёдно для каждого элемента из Map, я не понимаю, каким образом она понимает какие значения будут приниматься, ведь не прописан какой-то цикл или метод который будет последовательно присваивать в String name следующее значение, когда работа с первым завершена. В задаче String name объявляется только в параметрах метода, как в куске кода, который я добавил про создании вопроса, и больше её нет, и вот как она может менять значения? Может есть какой-то подробный материал по этому и прочитав я пойму, просто не знаю даже, как это сформулировать чтоб загуглить.
0
Павел Маслов Backend Developer Expert
11 марта 2023, 15:14
Ты знаком в целом с работой функций? Есть понимание инициализации функции и ее вызова?
Я, к сожалению, целиком задачи не вижу. Но там есть дерево файлов. Просмотри подробно все файлы с кодом (если их несколько). Увидишь, что функция где то вызывается и в месте вызова ей передаются аргументы для параметра name.
Ответом на вопрос "откуда берутся эти значения name" и будет выяснение того, что и исходя из какой логики передают в функцию.
0
Павел Маслов Backend Developer Expert
11 марта 2023, 15:16
Собрались эксперты))
0
Alexander BlinovExpert
11 марта 2023, 15:28
package com.javarush.task.jdk13.task08.task0815;
import java.util.HashMap;
import java.util.Map;
/*
Одинаковые имя и фамилия
*/
public class Solution {
public static Map<String, String> createMap() {
//напишите тут ваш код
}
public static int getCountTheSameFirstName(Map<String, String> map, String name) {
//напишите тут ваш код
}
public static int getCountTheSameLastName(Map<String, String> map, String lastName) {
//напишите тут ваш код
}
public static void main(String[] args) {
}
}
Вот так выглядит код в этой задаче без решения, других файлов с кодом нет, либо же они не доступны пользователю. С работой функций знаком, на сколько это возможно на 14 уровне JavaRush, с инициализацией так же. С вызовом вот сложнее, не всегда понимаю переданные параметры, иногда, как в этой задаче, они непонятно откуда взяты.
0
Павел Маслов Backend Developer Expert
11 марта 2023, 15:37
Странно, что в функции main нет комментария "напишите тут ваш код".
Продублируй, пожалуйста, еще условие)
0
Alexander BlinovExpert
11 марта 2023, 15:38
Создать словарь (Map) занести в него десять записей по принципу «Фамилия» - «Имя». Проверить сколько людей имеют совпадающие с заданным именем или фамилией.
Требования:
• Программа не должна выводить текст на экран.
• Программа не должна считывать значения с клавиатуры.
• Метод createMap() должен создавать и возвращать словарь Map с типом элементов String, String состоящих из 10 записей по принципу «Фамилия» - «Имя».
• Метод getCountTheSameFirstName() должен возвращать число людей у которых совпадает имя.
• Метод getCountTheSameLastName() должен возвращать число людей у которых совпадает фамилия.
0
Павел Маслов Backend Developer Expert
11 марта 2023, 16:00полезный
Все, понял, спасибо.
Смотри - есть сигнатура функции (ее название плюс список параметров). Здесь проблем нет откуда что и как, хотя бы потому, что такую функцию взяли и объявили - вопрос о полезности откидываем.
Решаем вопрос с вызовами. Имеем функцию, которая должна получить на вход коллекцию (мапу) и строку. Откуда они возьмутся и будут ли логически валидны ее не волнует (проверяется только соответствие типу, и то для ссылочных типов можно null передать и тип-родитель, к примеру, object). Так что в момент вызова функции ответственность на том, кто ее вызывает, и раз она работает значит ее точно вызывают!
По задаче нужно найти число людей, у которых имя совпадает с шаблонным. Значит в месте вызова функции (скорее всего в функции main) в интересующую функцию будет передано ЭТО шаблонное имя. Его нужно найти.
Если код работает без заполнения функции main, то значит где то за пределами доступных файлов (в тестовом каталоге) имеется другой класс в котором есть что то типа:
Map<String, String> userMap = Solution.createMap();
int count = Solution.getCountTheSameFirstName(userMap, "Петя");
Почему Петя? Или кто бы то ни был? Потому что авторы логики теста захотели проверить такое имя. Если бы код был весь твой, то ты бы контролировал процесс от и до, и знал где что инициализируется, а где вызывается и какие параметры передать (можешь создать свой мини-проект и проверить - в нем без тебя магии вызова откуда то не произойдет).
А так ты написал примитивный API - функционал с модификатором доступа public, который позволяешь кому то где то вызывать а ля библиотеку (то есть тебя не волнует кто и откуда передаст параметры), но ты отвечаешь только за реализацию этого функционала
+4
Alexander BlinovExpert
11 марта 2023, 16:26
Получается где-то всё таки есть код с реализацией String name, который нам не видно, а я гадаю, откуда она и почему работает, так как работает. Я правильно понял?
0
Павел Маслов Backend Developer Expert
11 марта 2023, 16:34
Получается так.
Попробуй для интереса вместо public static поставить модификатор private для функции. Может в лог выведет ошибку с места вызова. Увидишь контекст. Ошибка будет типа: такой функции не существует.
Отберешь у теста возможность дернуть твою функцию)
0
Alexander BlinovExpert
11 марта 2023, 16:42
С private он всё равно компилируется но не принимает решение. Но спасибо за подробное объяснение, всё стало понятно.
0