• ,

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. чувствую что что-то в корне неправильно понял, поэтому мне так тяжело осилить данную задачку.
  • ,

package com.javarush.test.level09.lesson11.home04 HELP

package com.javarush.test.level09.lesson11.home04;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/* Конвертер дат
Ввести с клавиатуры дату в формате «08/18/2013»
Вывести на экран эту дату в виде «AUG 18, 2013».
Воспользоваться объектом Date и SimpleDateFormat.
*/

public class Solution {
    public static void main(String[] args) throws Exception {
       SimpleDateFormat date=new SimpleDateFormat("MM/dd/yyyy");
        System.out.println(date.format(new Date()));


       SimpleDateFormat newDateFormat=new SimpleDateFormat("MMM ", Locale.ENGLISH);
       SimpleDateFormat DateFormat= new SimpleDateFormat("dd, yyyy");
        System.out.print(newDateFormat.format(new Date()).toUpperCase()+DateFormat.format(new Date()));
    }
}

выводит в консоль в нужном виде:
01/13/2016
JAN 13, 2016
но сервер не принимает задачу.HELP
  • ,

package com.javarush.test.level07.lesson09.task05;


Что тут не так а?

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

/* Удвой слова
1. Введи с клавиатуры 10 слов в список строк.
2. Метод doubleValues должен удваивать слова по принципу a,b,c -> a,a,b,b,c,c.
3. Используя цикл for выведи результат на экран, каждое значение с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list = new ArrayList<String>(10);
        for ( int i = 0; i < 10; i++ )
        {
            String s = reader.readLine();
            list.add(s);//Считать строки с консоли и объявить ArrayList list тут
        }

        ArrayList<String> result = doubleValues(list);

        for (String s : result)
        {
            System.out.println(s);
        }//Вывести на экран result
    }

    public static ArrayList<String> doubleValues(ArrayList<String> list)
    {
        for (int i = 0; i < list.size(); i++)
        {
            list.add(i, list.get(i));
            i++;
        }
        for ( int i = 0; i < list.size(); i++)
        {
            System.out.println(list.get(i));
        }//напишите тут ваш код
        return list;
    }
} 

level09.lesson11.home05 - не компилируется на сервере


package com.javarush.test.level09.lesson11.home05;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/* Гласные и согласные буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа должна вывести на экран две строки:
1. первая строка содержит только гласные буквы
2. вторая - только согласные буквы и знаки препинания из введённой строки.
Буквы соединять пробелом, каждая строка должна заканчиваться пробелом.

Пример ввода:
Мама мыла раму.
Пример вывода:
а а ы а а у
М м м л р м .
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String input = reader.readLine();
        String s1 = new String();
        String s2 = new String();
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') {}
            else {
                if (isVowel(input.charAt(i)))
                    s1 += input.charAt(i) + " ";
                else
                    s2 += input.charAt(i) + " ";
            }
        }

        System.out.println(s1);
        System.out.println(s2);
        //напишите тут ваш код
    }


    public static char[] vowels = new char[]{'а', 'я', 'у', 'ю', 'и', 'ы', 'э', 'е', 'о', 'ё'};

    //метод проверяет, гласная ли буква
    public static boolean isVowel(char c)
    {
        c = Character.toLowerCase©;  //приводим символ в нижний регистр - от заглавных к строчным буквам

        for (char d : vowels)   //ищем среди массива гласных
        {
            if (c == d)
                return true;
        }
        return false;
    }
}



Перебрал все возможные варианты и с ArrayList и с проверкой на пробельные символы. Вообщем может реально я что-то упустил и кто подскажет!!!
Вывод идентичной входной строки как в примере такой же…
  • ,

Не проходит тестирование level17.lesson10.bonus02 [РЕШЕНО]

CRUD 2
CrUD Batch — multiple Creation, Updates, Deletion
!!! РЕКОМЕНДУЕТСЯ выполнить level17.lesson10.bonus01 перед этой задачей!!!

Программа запускается с одним из следующих наборов параметров:
-c name1 sex1 bd1 name2 sex2 bd2…
-u id1 name1 sex1 bd1 id2 name2 sex2 bd2…
-d id1 id2 id3 id4…
-i id1 id2 id3 id4…
Значения параметров:
name — имя, String
sex — пол, «м» или «ж», одна буква
bd — дата рождения в следующем формате 15/04/1990
-с — добавляет всех людей с заданными параметрами в конец allPeople, выводит id (index) на экран в соответствующем порядке
-u — обновляет соответствующие данные людей с заданными id
-d — производит логическое удаление всех людей с заданными id
-i — выводит на экран информацию о всех людях с заданными id: name sex bd

id соответствует индексу в списке
Формат вывода даты рождения 15-Apr-1990
Все люди должны храниться в allPeople
Порядок вывода данных соответствует вводу данных
Обеспечить корректную работу с данными для множества нитей (чтоб не было затирания данных)
Используйте Locale.ENGLISH в качестве второго параметра для SimpleDateFormat

public class Solution {
    public static List<Person> allPeople = new ArrayList<Person>();

    static {
        allPeople.add(Person.createMale("Иванов Иван", new Date()));  //сегодня родился    id=0
        allPeople.add(Person.createMale("Петров Петр", new Date()));  //сегодня родился    id=1
    }

    public static void main(String[] args) {

        if (args[0].equals("-c")) {
            create(args);
        }

        if (args[0].equals("-u")) {
            update(args);
        }

        if (args[0].equals("-d")) {
            delete(args);
        }

        if (args[0].equals("-i")) {
            info(args);
        }
    }


    private static synchronized void info(String[] args) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);

        for (int i = 1; i < args.length; i++) {
            if (allPeople.get(Integer.parseInt(args[i])).getSex().equals(Sex.MALE)) {
                System.out.println(allPeople.get(Integer.parseInt(args[i])).getName() +
                        " м " + simpleDateFormat.format(allPeople.get(Integer.parseInt(args[i])).getBirthDay()));
            } else if (allPeople.get(Integer.parseInt(args[i])).getSex().equals(Sex.FEMALE)) {
                System.out.println(allPeople.get(Integer.parseInt(args[i])).getName() +
                        " ж " + simpleDateFormat.format(allPeople.get(Integer.parseInt(args[i])).getBirthDay()));
            }
        }
    }

    private static synchronized void delete(String[] args) {
        for (int i = 1; i < args.length; i++) {
            allPeople.get(Integer.parseInt(args[i])).setBirthDay(null);
            allPeople.get(Integer.parseInt(args[i])).setName(null);
            allPeople.get(Integer.parseInt(args[i])).setSex(null);
        }
    }

    private static synchronized void update(String[] args) {
        for (int i = 1; i < args.length; i += 4) {
            allPeople.get(Integer.parseInt(args[i])).setBirthDay(new Date(args[i + 3]));
            allPeople.get(Integer.parseInt(args[i])).setName(args[i + 1]);

            if (args[i + 2].equals("м")) {
                allPeople.get(Integer.parseInt(args[i])).setSex(Sex.MALE);
            } else if (args[i + 2].equals("ж")) {
                allPeople.get(Integer.parseInt(args[i])).setSex(Sex.FEMALE);
            }
        }
    }

    private static synchronized void create(String[] args) {
        for (int i = 1; i < args.length; i += 3) {
            if (args[i + 1].equals("м")) {
                Person male = Person.createMale(args[i], new Date(args[i + 2]));
                allPeople.add(male);
                System.out.println(allPeople.indexOf(male));
            } else if (args[i + 1].equals("ж")) {
                Person female = Person.createFemale(args[i], new Date(args[i + 2]));
                allPeople.add(female);
                System.out.println(allPeople.indexOf(female));
            }
        }
    }
}

level05.lesson12.home05

package com.javarush.test.level05.lesson12.home05;

/* Вводить с клавиатуры числа и считать их сумму
Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
//Напишите тут ваш код
BufferedReader reader = new BufferedReader (new InputStreamReader(System.in));
int sum = 0;
while (true)
{
String s = reader.readLine();
if (s.equals(«сумма»))
return;
Int a = Integer.parseInt(s);
sum += a;
}
System.out.println(sum);
}
}

Помогите пожалуйста решить задачу, расскажите в чём ошибки.
p.S слово «сумма» в консоли нужно вводить в кавычках или без, заранее спасибо

level05.lesson12.home05 (Помогите решить задачу)

package com.javarush.test.level05.lesson12.home05;

/* Вводить с клавиатуры числа и считать их сумму
Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
//Напишите тут ваш код
BufferedReader reader = new BufferedReader (new InputStreamReader(System.in));
int sum = 0;
while (true)
{
String s = reader.readLine();
if (s.equals(«сумма»))
return;
Int a = Integer.parseInt(s);
sum += a;
}
System.out.println(sum);
}
}

Народ 2 дня потратил, не знаю как решить расскажите, пожалуйста, укажите на ошибки.

P.S Слово сумма в консоли нужно вводить с кавычками или без?