• ,

package com.javarush.test.level08.lesson08.task05;

   Доброго времени суток, джаварашевцы. Очень не хотелось создавать новый топик по такой изъезженной теме как коллекции, но вижу придется. Помогите пожалуйста разобраться и исправить код. Чувствую, что где-то конкретно затупил, но в упор не вижу. Уже второй день сижу на работе пялюсь и не могу понять, что не так. Ниже я буду выкладывать части кода, и снизу под ними как я понимаю работу оного.

public static void main (String [] args)
    {
        HashMap<String, String> map = createMap();
        removeTheFirstNameDuplicates(map);
        for (Map.Entry<String, String> para : map.entrySet())
        {
            String name = para.getKey();
            String nameTwo = para.getValue();
            System.out.print(name + " " + nameTwo);
            System.out.println(" ");
        }
    }

Вызывается метод createMap, по которому создается карта из десяти людей (фамилия — имя).
Вызывается метод removeTheFirstNameDuplicates(map), с переданной ему в качестве аргумента картой map, далее вывод уже отредактированной map.

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("Дорн", "Иван");

        return map;

    }

Создается карта из десяти людей, и возвращается карта map.

public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
       HashMap<String, String> copy = new HashMap<String, String>(map);
       for (Map.Entry<String, String> para : copy.entrySet())
       {
           for (Map.Entry<String, String> paraTwo : map.entrySet())
           {
               if (para.getValue().equals(paraTwo.getValue()))
                   removeItemFromMapByValue(map, paraTwo.getValue());
               break;
           }
       }
    }

map копируется в copy.
Первый цикл: получаем пару ключ-значение по copy, далее по внутреннему циклу получаем пару из map, и если значение (имя) в copy эквивалентное значению в map, то вызываем метод removeItemFromMapByValue(map, paraTwo.getValue()) с переданными ему в качестве аргументов value из map и саму map, и выходим из внутреннего цикла, и начинаем первый for заново.

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());
        }
    }

В данном методе принимаем map и его value в качестве аргументов.
Создаем копию map, получаем пару из copy, и если value в copy эквивалентно переданному value, то удаляем эту ячейку в карте по ключу. Как бы это смешно не звучало, но я вообще не понял зачем нужно ещё раз создавать копию мэп. Разве нельзя сразу удалить значение в первом методе?

Вывод моего говнокода:

Эндис Иван
Корчевский Петр
Нестор Иван
Дорн Иван

  Если я правильно понял, то когда мы копируем карту, то её копия создается с такими же парами, но в случайном порядке. В методе removeTheFirstNameDuplicates мы берем первую пару из копии, и сравниваем её по-очереди со всеми парами из мэп, и когда находится парами с одинаковыми значениями, то мы вызываем метод removeItemFromMapByValue. В последнем методе мы снова создаем копию мэп, и ищем в ней пару с переданным значением (value), после чего удаляем данную ячейку в мэп. Спасибо за любые подсказки, ссылки на статьи, критику и т.д.

P.S. чувствую что что-то в корне неправильно понял, поэтому мне так тяжело осилить данную задачку.
  • ,

level07.lesson09.task03

   Добрый день, уважаемые. Сижу над очередной задачей по ArrayList, и ещё больше понимаю, что абсолютно не понимаю как же в памяти происходят все эти процессы. Для того чтобы выразить свою мысль, я процитирую условие задачи, и как я понимаю, как оно должно работать. Условие задачи:
1. Создай список из слов «мама», «мыла», «раму».
2. После каждого слова вставь в список строку, содержащую слово «именно».
   Значит допустим, есть некий внутренний массив. Изначально мы вносим туда три слова: мама, мыла, раму (условно s1, s2, s3). Соответственно: s1 встаёт на ячейку в массиве «0», s2 — «1», и s3 на «2». По условию задачи нам надо вставить после каждого слова «именно». Как я понимаю, чтобы осуществить это, нам надо как бы «раздвинуть слова в массиве». То есть, s2 поставить в ячейку «2», а s3 в ячейку «4» (как на скриншоте).

Соответственно этому, по-моему сам процесс происходит следующим образом:
  1. Берем данные из ячейки #1 и копируем её в ячейку #2
  2. Данные из ячейки #2 переносятся в ячейку #3
  3. Берем данные из ячейки #3 и копируем в ячейку #4
Теперь в ячейки #1, #3 и #5 вставляем слово «именно». Собственно это я попытался выполнить в программе вручную без цикла, чтобы понять как оно работает.

list.add(2, list.get(1));
        list.add(4, list.get(3));

        list.add(1, "именно");
        list.add(3, "именно");
        list.add(5, "именно");

Вывод этого:
мама
именно
мыла
именно
мыла
именно
раму
раму

Прошу разобраться как же сделать эту задачу, и почему именно так. Заранее благодарен.
P.S. приношу извинение за такое огромное объяснение.
P.P.S. бывают такие темы, когда ну ни в какую не доходит, хоть застрелись.
  • ,

Максимальное и минимальное числа в массиве

Я далеко не новичок в программировании и задачи пока жутко легкие, но порой правильные решения не проходят.

Задача: Создать массив на 20 чисел. Заполнить его числами с клавиатуры. Найти максимальное и минимальное числа в массиве.
Вывести на экран максимальное и минимальное числа через пробел.

А как можно решить подругому? (level04.lesson13.task03)

Здравствуйте. Когда я решил это задачу я понял, что мой код попахивает говнецом. Как можно решить её по другому? (Ъ способ)
Вот мой быдлокод:
/* Рисуем треугольник
Используя цикл for вывести на экран прямоугольный треугольник из восьмёрок со сторонами 10 и 10.
Пример:
8
88
888
...
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        //Напишите тут ваш код
        for (int i=0; i<1;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<2;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<3;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<4;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<5;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<6;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<7;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<8;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<9;i++)
            System.out.print(8);
        System.out.println();
        for (int i=0; i<10;i++)
            System.out.print(8);
        System.out.println();
    }
}
  • ,

Вырабатываем правильные привычки

Привет Всем!

Мне уже 40ет. Хочу сменить карьеру. Точнее я свою трудовую деятельность начинал с программирования. В старые времена работал с базами ForPro, dBase. Давалось все без проблем. Потом вскочил в мелкий бизнес. Больших успехов не достиг. Точнее так… Задолбалось выползать из кризисов, чтоб через несколько лет тебя новый накрыл. Вот и решил вернуться в базы но со сторону ООП.

Курс очень понравился. Пока, 8-ой уровень, задачки идут как семечки. Но, дают о себе знать старые привычки. Допустим, я стараюсь по минимуму плодить переменные/ссылки если они участвуют в процессе один раз. Но анализирую решения задач от других участников, вижу, что люди фигачат лишние переменные на право и на лево.

Хочется «поставить руку» (стиль) еще в процессе обучения. Вот конкретный пример: