JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Не проходит проверку. Что не так?
Дмитрий Ковтонюк
19 уровень
  • 06.05.2018
  • 1072просмотров
  • 13комментариев

Не проходит проверку. Что не так?

Вопрос по задаче Нам повторы не нужны
Java Syntax,  8 уровень,  8 лекция
Архивный

Создать словарь (Map<String, String>) занести в него десять записей по принципу "фамилия" - "имя".
Удалить людей, имеющих одинаковые имена.

Требования:
  • Программа не должна выводить текст на экран.
  • Программа не должна считывать значения с клавиатуры.
  • Метод createMap() должен создавать и возвращать словарь Map с типом элементов String, String состоящих из 10 записей.
  • Метод removeTheFirstNameDuplicates() должен удалять из словаря всех людей, имеющие одинаковые имена.
  • Метод removeTheFirstNameDuplicates() должен вызывать метод removeItemFromMapByValue().
package com.javarush.task.task08.task0817; import java.util.HashMap; import java.util.Map; import java.util.Iterator; import java.util.Map.Entry; import java.io.IOException; /* Нам повторы не нужны */ public class Solution { public static HashMap<String, String> createMap() { HashMap<String, String> map = new HashMap<String, String>(); map.put("Иванов", "Саша"); map.put("Петров", "Петя"); map.put("Сидоров", "Вася"); map.put("Порох", "Вася"); map.put("Стелла", "Петя"); map.put("Мажор", "Кирил"); map.put("Кобейн", "Курт"); map.put("Ноут", "Иван"); map.put("Гамми", "Сергей"); map.put("Маус", "Лена"); System.out.println(map.entrySet()); return map; //напишите тут ваш код } public static void removeTheFirstNameDuplicates(HashMap<String, String> map) { Iterator<HashMap.Entry<String, String>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { HashMap.Entry<String, String> pair = iterator.next(); HashMap<String, String> copy = new HashMap<String, String>(map); for (Map.Entry<String, String> pair1 : copy.entrySet()) { if ((pair1.getValue().equals(pair.getValue())&!(pair1.getKey().equals(pair.getKey())))) { removeItemFromMapByValue(map, pair.getKey()); } } System.out.println(map.entrySet()); } }//напишите тут ваш код public static void removeItemFromMapByValue(HashMap<String, String> map, String value) { HashMap<String, String> copy = new HashMap<String, String>(map); for (Map.Entry<String, String> pair : copy.entrySet()) { if (pair.getValue().equals(value)) map.remove(pair.getKey()); } } public static void main(String[] args) { } }
0
Комментарии (13)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Dzhin
Уровень 40
8 мая 2018, 22:51полезный
Попробуй сделать так : - в первом методе получи список значений (можешь поместить их в Аrraylist) - потом циклами проверяешь в этом списке повторяющиеся значения - если нашел повторяющиеся значение, то вызываете второй метод, который удаляет из map
+1
Dzhin
Уровень 40
8 мая 2018, 22:53
Во второй метод нужно передать map из которого должен удалить и значение которое повторяется
0
Дмитрий Ковтонюк
Уровень 19
9 мая 2018, 10:53
Попробовал. Последние 2 условия при проверке не выполняются.
public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
     ArrayList<String> list = new ArrayList<String>();

      Iterator<HashMap.Entry<String, String>> iterator = map.entrySet().iterator();
     while (iterator.hasNext()) {
         HashMap.Entry<String, String> pair = iterator.next();

        for (int i = 0; i < list.size(); i++){
            if (!(list.get(i).equals(pair.getValue()))) { list.add(pair.getValue()); }
            else
             { removeItemFromMapByValue(map, pair.getValue()); }
      }
     }
0
Dzhin
Уровень 40
9 мая 2018, 14:37
Ты меня неправильно понял. Ты не добавил значения в List и пытаешься пройти циклом по нему
0
Dzhin
Уровень 40
9 мая 2018, 14:59решение
...
+2
Dzhin
Уровень 40
9 мая 2018, 14:59
Вот первый метод по быстрому накидал.
0
Дмитрий Ковтонюк
Уровень 19
10 мая 2018, 14:42
Спасибо. Я не думал, что командой map.values() можна залить значения с мапа в список. И цикл с количественным услувием - супер. А я запутался в этой задаче...
0
Ярослав Java Developer Master
6 мая 2018, 20:33полезный
Map<String, String> А ты создаешь конкретный HashMap. И очень странно ты чистишь дубликаты. Ты проверяешь, есть ли одно значение в наборе, где сразу все значения. У тебя всегда будет чистить как дубликаты, так и не дубликаты, потому что ты не учитываешь то, что тот объект, что ты достал, существует минимум в одном экземпляре.
+1
Дмитрий Ковтонюк
Уровень 19
8 мая 2018, 20:16
Заменил второй метод:
Iterator<HashMap.Entry<String, String>> iterator = map.entrySet().iterator();
     while (iterator.hasNext()) {
         HashMap.Entry<String, String> pair = iterator.next();

         HashMap<String, String> copy1 = new HashMap<String, String>(map);
      for (Map.Entry<String, String> pair1 : copy1.entrySet()) {
           if (!pair.getKey().equals(pair1.getKey()))
         { removeItemFromMapByValue(pair.getKey()); }
      }
     }//напишите тут ваш код

  }
и получил ошибку:
com/javarush/task/task08/task0817/Solution.java:37: error: method removeItemFromMapByValue in class com.javarush.task.task08.task0817.Solution cannot be applied to given types;
           { removeItemFromMapByValue(pair.getKey()); }
             ^
  required: java.util.HashMap<java.lang.String,java.lang.String>,java.lang.String
  found: java.lang.String
  reason: actual and formal argument lists differ in length
0
Ярослав Java Developer Master
8 мая 2018, 20:17полезный
Ошибка явно указывает, что ты передаешь в метод String, а должен передавать коллекцию HashMap со стрингами.
+1
Дмитрий Ковтонюк
Уровень 19
8 мая 2018, 20:26
сорри, в комменте выше вставил свой код. Я так понимаю, что только эта команда может делать ошибку. Но это же вроде комманда для удаления пары:
removeItemFromMapByValue(pair.getKey());
как вариант может..:
removeItemFromMapByValue(pair.get(key));
- но тоже не работает.. как быть?
0
Ярослав Java Developer Master
8 мая 2018, 20:28полезный
Посмотрите для начала на параметры, которые нужно передавать в метод :)
+1
Дмитрий Ковтонюк
Уровень 19
8 мая 2018, 21:10
готово:
{ removeItemFromMapByValue(map, pair.getKey()); }
скомпелировалось но не выполнило условия.
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush