• ,

package com.javarush.test.level08.lesson03.task03;

Столкнулся с трудностью в задаче с Коллекцией HashMap из котов.
Вот собственно код:


/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        Map<String, Cat> map = new HashMap<String, Cat>();
        for(int i = 0; i < 10; i++)
        {
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
        return (HashMap<String, Cat>) map;

    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}


Пытаюсь заполнить список именами котов и объектами, но в задаче видимо требуется что-то другое, только я никак не пойму, что именно. Кто-нибудь подскажет что конкретно нужно сделать в задаче?

62 комментария

hubert
Задача, по сути, реализовать метод addCatsToMap(). С чего ты взял, что там именно 10 элементов? Сигнатура (String[] cats) совсем не ознаает, что там придет 10 котов.
LokiMora
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота. — разве в этой строчке не говорится, что нужно заполнить список 10 элементами?
LokiMora
Спасибо за подсказку, не сразу понял, что вы имеете ввиду :D
8adim
да, точно, в этом и была хитрость — cats.length
s1rt
  • s1rt
  • 0
Может кто нибудь ответит.
Почему требуется тип возвращаемого значения? Ведь при объявлении переменной уже указанно что Map<String, Cat>. И туда уже записана ссылка на объект HashMap.
Все дело в том что это интерфейс?
Почему бы не написать сразу HashMap<String, Cat> map
тогда бы не пришлось ставить тип возвращаемого значения.
goodfella
Слишком глубоко смотришь.
Ты работаешь с методом. Если метод «void» — значение никакое не возвращается.
В противном случае что-то должно возвращаться. В данной задаче тип возвращаемого значения — коллекция типа HashMap<String, Cat>.
Поправьте, пожалуйста, если я не прав.
mazda22x
а я нифига не понял… нифига не понял эту тему…
Timur
Читал это Лекция 8?
panser
а что означает эта строчка?

return name != null ? name.toUpperCase() : null;


а, именно непонятен оператор

name != null
IvanDurov
Означает
if (name != null)
    return name.toUpperCase();
else
    return null;
Nikolas85
  • Nikolas85
  • 0
  • Комментарий отредактирован 2016-06-21 18:43:06 пользователем Nikolas85
И что говорит этот метод name.toUpperCase();? Зачем ее применение?
Nikolas85
  • Nikolas85
  • 0
  • Комментарий отредактирован 2016-06-21 19:19:48 пользователем Nikolas85
Поспешил с вопросом) Условие говорит, если поле name не пустое, то текст находящийся в нем преобразовываются верхний регистр. Как результат мы видим:
гарфи — ГАРФИ
васька — ВАСЬКА
визя — ВИЗЯ…
Nazgul
Здравствуйте, помогите разобраться. Программа компилируется выводит список элементов, но не принимает ответ. Вот мой код
public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
      HashMap <String, Cat> map = new HashMap<String, Cat>();  //Напишите тут ваш код
        for (int i=0; i < cats.length; i++)
        {
        Cat cat = new Cat("Cat");
        map.put(cats[i],cat);
        }
      
        return map;
    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}

Вот что получаем на выходе:
гарфи — CAT
васька — CAT
визя — CAT
снежок — CAT
мурка — CAT
дымка — CAT
босс — CAT
серый — CAT
рыжик — CAT
борис — CAT
Предполагаю, что проблема в том. что в задании сказано, что надо вывести элементы на экран с новой строки, но вывод уже написан в майне, попытался написать вывод в методе, та же проблема, только вывело по 2 раза.
Diana
методом addCatsToMap в карту ты не добавляешь котов, которые создаются в main
Nazgul
спасибо!
pavelkamo
У тебя
Cat cat = new Cat(«Cat»);

а должно быть
Cat cat = new Cat(cats[i]);
потому что должен быть такой ответ:
гарфи — ГАРФИ
васька — ВАСЬКА
визя — ВИЗЯ
снежок — СНЕЖОК
мурка — МУРКА
дымка — ДЫМКА
босс — БОСС
серый — СЕРЫЙ
рыжик — РЫЖИК
борис — БОРИС
demydd
не можу збагнути чому сервак не приймає програму.

package com.javarush.test.level08.lesson03.task03;

import java.util.HashMap;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {   HashMap<String,Cat> map = new HashMap<String, Cat>();

        String [] cats1=cats;
        for (int i=0;i<10;i++){
        Cat cat=new Cat(cats1[i]);
            map.put(cats1[i],cat);
        }
        return map;

        //Напишите тут ваш код

    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}
tsev
Ответ на твой вопрос есть в первом комментарии товарища hubert
demydd
дякую
Pseverin
Хочу разобраться… Почему в данном примере мы создаем объектов-котов с одинаковым именем cat. Я раньше считал, что у объектов должны быть уникальные имена…
for (int i=0; i < cats.length; i++)
        {
        Cat cat = new Cat("Cat");
        map.put(cats[i],cat);
        }

Может кто-то помочь разобраться? Буду очень признателен)
MisterY
  • MisterY
  • 0
  • Комментарий отредактирован 2014-07-18 14:05:35 пользователем MisterY
Ты забыл об области видимости переменных, т.е. ты присвоил ссылку на объект типа Cat, переменной cat, записал эту ссылку в map, в следующей строке, дальше закрывается блок "}" и твоя переменная cat удаляется, но она содержала лишь ссылку на объект, который записан еще и в map, значит объект не пропадает, только лишняя копия ссылки помечается как мусор. Лично я использовал такую запись «map.put(cats[i], new Cat(cats[i]) );» т.е. вообще не плодил лишней ссылки, и сразу тут же передавал в конструктор имя кота. Чего ты кстати не делал))) Удачи)
Multmaniac
присоединяюсь к предыдущему вопросу. Никак не могу с этим участком разобраться. Предполагаю, что созданный объект удаляется после того, как в cat записывается новый объект new Cat. А как тогда быть с map? Или после команды map.put(cats[i], cat) в поле записывается фиксированное значение, которому уже не нужен объект, который в это поле передавался? Или наоборот, ссылки на объекты, созданные в этом цикле, хранятся в map, поэтому объекты не удаляются и обращаться к ним можно только через map?.. Или все, что я написал — полный бред. Объясните что к чему, пожалуйста.
Sant9Iga
объект удаляется из heap когда на него нету ссылок. Это делает Garbage collector(сборщик мусора). Он это делает только когда JVM не хватает памяти. Запускается GC и сканирует все объекты который сейчас существуют в heap, если ссылок на объект нету тогда GC убивает этот объект.

Cat cat = new Cat("Cat");
map.put(cats[i],cat);

здесь в цикле создается кот и добавляется в мапу. ссылка cat перезатирается сats.length раз.
но есть ссылка из мапы. Поэтому с этими объектами ничего не произойдет
можно писать даже так
for (int i=0; i < cats.length; i++)
        {
        
        map.put(cats[i],new Cat("Cat"));
        }

так тоже будет работаьт
k1per
Программа не проходит тестирование!
package com.javarush.test.level08.lesson03.task03;

import java.util.HashMap;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
       HashMap<String, Cat> map = new HashMap<String, Cat>();

       
       
        for( int i = 0; i < cats.length;i++)
        {

            map.put(cats[i], new Cat("Cat"));
        }
       
        return map;


    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}


Выдает:
гарфи — CAT
васька — CAT
визя — CAT
снежок — CAT
мурка — CAT
дымка — CAT
босс — CAT
серый — CAT
рыжик — CAT
борис — CAT

Process finished with exit code 0
Munch
  • Munch
  • 0
  • Комментарий отредактирован 2014-02-23 17:37:54 пользователем Munch
<code>package com.javarush.test.level08.lesson03.task03;

import java.util.HashMap;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        //Напишите тут ваш код
        HashMap<String, Cat> saar = new HashMap<String, Cat>();

        for (String cat : cats) saar.put(cat, new Cat("cat"));
        return saar;

    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}</code>
Почему не проходит тестирование, хотя на консоли отображаются все 10 созданных котов?
Munch
все, поняла в чем косяк был
Sant9Iga
копипаст, ты мой копипаст. у тебя такая же ошибка как и у того, у кого ты взял этот код и чуть исправил. посмотри на имя кота. каким оно должно быть.
Shustov
package com.javarush.test.level08.lesson03.task03;

import java.util.HashMap;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
       HashMap <String, Cat> map = new HashMap<String, Cat>();
        for (int i=0; i < cats.length; i++)
        {

            map.put(cats[i],new Cat("Cat"));
        }

        return map;
    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}


перечитал все комментарии, всеравно не понял что не так то? Все выводит

гарфи - CAT
васька - CAT
визя - CAT
снежок - CAT
мурка - CAT
дымка - CAT
босс - CAT
серый - CAT
рыжик - CAT
борис - CAT
igor
у меня почему то заместо
map.put(cats[i],new Cat("Cat"));

map.put(cats[i],new Cat(cats[i]));

не помню почему я так решил
Shustov
помогло…
Beginner
Подскажите, пожалуйста, почему не проходит проверку? Компилируется нормально.

package com.javarush.test.level08.lesson03.task03;

import com.javarush.test.level04.lesson02.task03.Cat;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }

    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        //Напишите тут ваш код

        HashMap<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++){
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
        return map;
    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}
Bambados
  • Bambados
  • 0
  • Комментарий отредактирован 2014-07-16 15:33:41 пользователем Bambados
Доброго времени суток!
Возможно вместо:
<code>
for (int i = 0; i < cats.length; i++){
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
</code>
Следует использовать более укороченную запись!
<code>
for (String X : XXXX) {
    bla bla bla...
}
</code>
Ronan
  • Ronan
  • 0
  • Комментарий отредактирован 2014-06-29 23:28:41 пользователем Ronan
Скажите пожалуйста почему нужно с MAP for each цикл и нельзя простой for
Пример:
<code>for (String s : cats)
        {
            mapList.put(s, new Cat(s));
        }</code>

а не
<code>for (int i = 0; i < cats.length; i++){
            Cat cat1 = new Cat("CAt1");
            mapList.put(cats[i],cat1);

        }</code>
или это так работает колекция мар?
Bambados
Доброго времени суток!
Так просто изящнее, да и приятнее, не правда ли?

for (String s : cats)
        {
            map.put(s, new Cat(s.toUpperCase()));
        }
MaJ0r
Наверное это задумка создателей, но тема не раскрыта )) Нет теории, не ясно как оно работает, мало вводных, решить не смог (
INSIDIUS
Здравствуйте! Подскажите, пожалуйста, вывод корректный, но при проверке пишет что «Программа не компилируется на сервере»

package com.javarush.test.level08.lesson03.task03;

import com.javarush.test.level06.lesson11.home02.Cat;

import java.util.HashMap;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        HashMap<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        //Напишите тут ваш код
        HashMap<String, Cat> map = new HashMap<String, Cat>();

        for (String cat : cats) {
           map.put(cat, new Cat(cat));
        }
        return map;
    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}


гарфи — ГАРФИ
васька — ВАСЬКА
визя — ВИЗЯ
снежок — СНЕЖОК
мурка — МУРКА
дымка — ДЫМКА
босс — БОСС
серый — СЕРЫЙ
рыжик — РЫЖИК
борис — БОРИС

Process finished with exit code 0
INSIDIUS
Та же ошибка при реализации метода addCatsToMap другим способом:

public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        //Напишите тут ваш код

        HashMap<String, Cat> map = new HashMap<String, Cat>();

        for (int i = 0; i < cats.length; i++)
        {
            map.put(cats[i], new Cat(cats[i]));
        }

        return map;
    }
Docktor91

import com.javarush.test.level06.lesson11.home02.Cat;
INSIDIUS
Спасибо Вам за помощь. Вот уж не заметил серого импорта в Идее :(
Yakymenko
даа та-же проблема с импортами
Luarvik
Спасибо!
Какой подвох…
Pilot
  • Pilot
  • 0
  • Комментарий отредактирован 2014-08-30 00:46:03 пользователем Pilot
<code>package com.javarush.test.level08.lesson08.task05;

import java.util.*;

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

public class Solution
{
    public static void main(String arg[]){

        removeTheFirstNameDuplicates(createMap());
    }

    public static HashMap<String, String> createMap()
    {
        //Напишите тут ваш код
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("a","aa");
        map.put("b","bb");
        map.put("c","ff");
        map.put("d","dd");
        map.put("e","ee");
        map.put("f","kk");
        map.put("g","gg");
        map.put("i","ff");
        map.put("k","kk");
        map.put("o","oo");
        return map;

    }

    public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
        //Напишите тут ваш код
        HashMap<String, String> copy = new HashMap<String, String>(map);
        ArrayList<String> slova = new ArrayList<String>();
        for (Map.Entry<String,String> pair: copy.entrySet()) {
            slova.add(pair.getValue());
        }
        int count = 0;

        for (int i = 0; i < slova.size(); i++) {
            String d = slova.get(i);
            count = 0;
            for (int j = 0; j < slova.size(); j++) {
                if (d.equals(slova.get(j))){
                    count = count+1;
                }
                if (count>1){
                    removeItemFromMapByValue(copy,slova.get(j));
                    count = 0;
                }
            }
        }
/*
        for (Map.Entry<String,String> pa : copy.entrySet()){
            System.out.println(pa.getKey()+" - "+pa.getValue());
        }*/


    }

    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());
        }
    }
}</code>
Уффф… не пойму что не так, вроде всё работает, класс удаления используется… но не проходит проверку.
Перед проверкой конечно комментирую и мэйн и вывод Мар.

Блиннн, сори, не в ту задачу запостил(((
Cawich
подскажите непутевому, в чем разница?
был код

public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        HashMap<String, Cat> out = new HashMap<String, Cat>();
        for(int i=0; i<10;i++){
            Cat cat = new Cat(cats[i]);
            out.put(cats[i], cat);
        }
        return out;
    }

стал соответственно в нужном месте

for( /*не показываем рабочий for each*/ ){
            Cat cat = new Cat(ХХ);
            out.put(ХХХХ);
        }


вывод в обоих случаях идентичный:
борис — БОРИС
гарфи — ГАРФИ
мурка — МУРКА
дымка — ДЫМКА
босс — БОСС
серый — СЕРЫЙ
визя — ВИЗЯ
снежок — СНЕЖОК
васька — ВАСЬКА
рыжик — РЫЖИК


почему первый вариант не работает, а второй — работает??
Docktor91
я думаю первый бы работал, если бы ты 10 заменил на cats.length
Cawich
почему же? в задании четко было оговорено количество пар на вывод, соответственно это не должно влиять на проходимость задачи в данном случае (т.к. cats.length == 10).
Trifan
так то оно так, но с cats.lenght у меня только что прошло тестирование.
насколько я понял из предыдущих заданий: лучше всегда писать более общий вариант. Поскольку коллекция замешана на массиве, то и количество экземпляров коллекции должно зависеть от cats.lenght а не просто константой.
Helga
Перечитала весь свой вроде как рабочий и прошедший валидацию код… Где, где в нем вызывается метод toString(), переписывающий имена котов в верхний регистр???
8adim
return name != null? name.toUpperCase(): null;
Naissur
Там вроде если значениями являются объекты, то при вызове метода getValue() автоматически вызывается метод toString(). Поправьте, если я не прав.
Pavel255
метод getValue() возвращает объект класса Cat.
А так как мы хотим этот объект вывести на печать System.out.println(… + pair.getValue());
, то при этом происходит преобразование в строку и автоматически вызывается метод toString() из Cat.
Ginger
А подскажите, пожалуйста по поводу синтаксиса. В чем различие между
Map<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++){
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
        return (HashMap<String, Cat>) map;


и вот этим
HashMap<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++){
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
        return map;
vladimirsencov
Немного некорректно в качестве уcловия цикла for использовать проверку «счетчик < длинs массива», потому что в задании явно говорится о 10 котах. А тут получается что условии «счетчик < 10» задача не проходит.
piste
Здравствуйте!
Почему код не проходит тестирование? Вывод верный!
package com.javarush.test.level08.lesson03.task03;

import java.util.HashMap;
import java.util.Map;

/* Коллекция HashMap из котов
Есть класс Cat с полем имя (name, String).
Создать коллекцию HashMap<String, Cat>.
Добавить в коллекцию 10 котов, в качестве ключа использовать имя кота.
Вывести результат на экран, каждый элемент с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        String[] cats = new String[] {"васька", "мурка", "дымка", "рыжик", "серый", "снежок", "босс", "борис", "визя", "гарфи"};

        Map<String, Cat> map = addCatsToMap(cats);

        for (Map.Entry<String, Cat> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
    }


    public static Map<String, Cat> addCatsToMap(String[] cats)
    {
        Map<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++)
        {

            map.put(cats[i], new Cat(cats[i]));
        }
        return map;
    }


    public static class Cat
    {
        String name;

        public Cat(String name)
        {
            this.name = name;
        }

        @Override
        public String toString()
        {
            return name != null ? name.toUpperCase() : null;
        }
    }
}


Вывод:
борис — БОРИС
гарфи — ГАРФИ
мурка — МУРКА
дымка — ДЫМКА
босс — БОСС
серый — СЕРЫЙ
визя — ВИЗЯ
снежок — СНЕЖОК
васька — ВАСЬКА
рыжик — РЫЖИК

Process finished with exit code 0
euclid1936
А возвращаемый тип разве не должен быть HashMap<String, Cat> у метода addCatsToMap(String[] cats)?
piste
Наверное, да, должен. Но почему тогда программа работала верно, когда возвращаемый тип был Map и зачем нужна запись в скобочках в этой строке:
return (HashMap<String, Cat>) map; 
— ведь вроде при объявлении метода уже указано, какой тип он возвращает:
public static HashMap<String, Cat> addCatsToMap(String[] cats)
kgalkin
  • kgalkin
  • 0
  • Комментарий отредактирован 2015-10-18 16:13:32 пользователем kgalkin
Доброго времени суток
Популярный вопрос, но ответа чтот так и не увидел)))
<code>
    public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        Map<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++)
        {
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
        return (HashMap<String, Cat>) map;

    }
</code>
Зачем в строке
<code>return (HashMap<String, Cat>) map;</code>
указывается
<code>(HashMap<String, Cat>)</code>
, ведь map и так этого типа??
utushalla
Вышло как то так.
По условию задачи добавить код нужно только в один метод, сам метод ниже.

{
        HashMap<String, Cat> catm = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length;i++)
        {
          Cat rancat = new Cat(cats[i]);
          catm.put(cats[i], rancat);  
        }//напишите тут ваш код
        
        return catm;
    }
megamind235
  • megamind235
  • 0
  • Комментарий отредактирован 2015-11-05 18:02:56 пользователем megamind235
Разобрался. Спасибо
nafanya
  • nafanya
  • 0
  • Комментарий отредактирован 2015-11-12 12:02:35 пользователем nafanya
public static HashMap<String, Cat> addCatsToMap(String[] cats)
    {
        //напишите тут ваш код
        HashMap<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++)
            map.put(cats[i], new Cat(cats[i]));
        
        return map;
    }
mrANDERSON
Не пойму как у вас всех вообще прошло с
return map;

у меня засчитало только с
return (HashMap<String, Cat>) map;

Но, почему-то, не проходило с
return new HashMap<String, Cat>(map);
хотя результат вывода в консоль был одинаков…
poster834
Задачу решил, но так и не понял почему решение не проходит с кодом

 HashMap<String, Cat> map = new HashMap<String, Cat>();
        for (int i = 0; i < cats.length; i++)
        {
            Cat cat = new Cat(cats[i]);
            map.put(cats[i], cat);
        }
    return  map;
sergey_b
решение задачи сводится к реализации метода addCatsToMap.
Создаем коллекцию:
HashMap<String, Cat> catsList = new HashMap<String, Cat>();

Входные данные (аргументы метода) — строка и объект.
А когда создаем объект, для него входные данные (аргументы) — строка т.е. значение элемента массива.
Дальше прогоняем по циклу:
for(int i = 0; i < cats.length; i++)
        {
            Cat cat = new Cat(cats[i]);
            catsList.put(cats[i], cat);
        }

Ну и т.к. метод статический то возвращаем результат:

 return catsList;
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.