Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28

Задание из курса JAVA EPAM

14.02.2024, 21:55. Показов 1246. Ответов 18

Студворк — интернет-сервис помощи студентам
Description
In this exercise we are going to manage contacts information.

A Contact is a class containing different information of how to reach a person or a company: phone number, emails, social media.

A contact has a name, which is provided via the class constructor. Also, a contact contains limited amount of entries:

a phone number (only a single one)
emails (up to 3 entries)
social media links (up to 5 entries)
A contact info entry is described with ContactInfo interface. Each entry has a title and a value. You need to implemented them as nested classes of the Contact class:

Contact.NameContactInfo - A ContactInfo implementation providing the name of the contact. Implement as private non-static nested class. Use "Name" for the entry title. It must not have its own fields. It must use fields of the bounded Contact instance instead.
Contact.Email - A ContactInfo implementation containing an email. Implement as public static nested class. Use "Email" for the entry title.
Contact.Social - A ContactInfo implementation containing a social media link/id. Implement as public static nested class. Let the user of the class define the title.
Other implementations must be anonymous. Do not provide other non-anonymous classes.
It is possible to add contact info entries via add* methods. All such methods return the created entry as the result, null if nothing was added to the contact.

addEmail(String localPart, String domain)
Adds an email entry.
addEmail("someone", "somewhere.com").getValue() will result to someone@somewhere.com.
addEpamEmail(String firstname, String lastname)
Adds a special email entry with "epam.com" domain. Please, implement this method using an anonymous extension of the Email class. Use "Epam Email" for the entry title.
addEpamEmail("some", "one").getValue() will result to some_one@epam.com
addPhoneNumber(int code, String number)
Adds a contact info entry for the phone number. Please, implement this method using an anonymous class. Use "Tel" for the entry title.
addPhoneNumber(44, "444 444-44-44").getValue() will result to +44 444 444-44-44
addTwitter(String twitterId)
Adds a contact info entry for the Twitter social media id. Use "Twitter" for the entry title, the given id for the value.
addInstagram(String instagramId)
Adds a contact info entry for the Instagram social media id. Use "Instagram" for the entry title, the given id for the value.
addSocialMedia(String title, String id)
Adds a contact info entry for the generic social media id. Use the given title for the entry title, the given id for the value.
Note that it is possible to rename contact with the rename method. Make sure it is not possible to rename contact to have null or empty value as the name.

One more method that the Contact class have is the getInfo() method. This method returns an array containing the ContactInfo entries in the following order:

name contact info
phone number contact info (if set)
email entries in order of addition (if any added)
social media entries in order of addition (if any added) Resulting array must not contain any null values.
Important restriction: Note that in this exercise you may not use Collections and Streams.


Может кто то сталкивался с этим или знает как решитьб просто не могу сообразить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2024, 21:55
Ответы с готовыми решениями:

Java Team Leader for Barclays Capital! EPAM Systems, Kiev
EPAM Systems (www.epam.com), one of the largest Software Engineering Services Companies in European IT market, CMMI Level 4 certified, is...

Срочно Senior Java Dev! Bonus $3000! Киев, компания EPAM Systems
Порекомендуй Senior Java Developer на горящую позицию на проект FX High Volume Market Data (FXMD) в компанию EPAM Systems и получи БОНУС!!!...

В чем неточность?(Задание с курса)
Прохожу курс по пайтону на stepik, далее опишу задание и прикреплю код. Проходит только 2 из 16 тестов(и то иногда 2 не проходиться, хоть...

18
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 08:45
Тут же не задание где нужно что то "решать", искать какие то способы реализации, тут просто детальная пошаговая инструкция что именно вы должны написать на языке программирования. Ничего кроме самого языка программирования знать не нужно.
2
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 10:19  [ТС]
Не могу понять что методы add должны возвращать объекты внутренних классов? Пишут что должны быть и анонимные классы
0
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 10:26
Да, по условию addXxx() должно вернуть тот объект который был добавлен либо null если ничего не добавлено.
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 10:36  [ТС]
И ещё не понял условие на количество надо в метод adxxx() ставить? Просто меня смущает что там написано про анонимные классы, и не могу понять какую там надо логику описывать
0
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 10:40
Раз написано что add может вместо добавленного объекта вернуть null, то есть ничего не добавить - единственной причиной почему он это не сделает является описанное ограничение на количество элементов. То есть в add() должна быть проверка не достигнут ли уже лимит.

Сам формат задания показывает что оно явно не на проверку умения программировать, а на умение понимать ТЗ и четко ему следовать.
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 15:57  [ТС]
Спасибо!

Добавлено через 5 часов 11 минут
Теперь только не могу найти как в последний метод getinfo() в массив всё это поместить
0
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 16:13
Ну так берете и засовываете в него в том порядке как написано, сначала name, потом телефон если есть, потом все емэйлы и так далее

Если под массивом имеется в виду не список а именно [], ну значит нужно заранее посчитать сколько в нем элементов и только тогда выделять ContactInfo[] info = new ContactInfo[count] и заполнять
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 16:31  [ТС]
Чтоб посчитать этг надо в каждый метод static int++ счётчик ставить
0
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 16:34
Зачем? Вы же внутри храните все эти объекты. В одой переменной имя, в другой переменной телефон, в каком то списке емэйлы. Вот и суммируйте 1 имя плюс 0 или 1 телефон плюс размер списка с емэйлами
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 16:43  [ТС]
Так в условии написано чтоб без коллекции, вот я и пробую без list

Добавлено через 7 минут
Понимаю что вроде всё просто но немного тяжело понимаю, вот код, можете подсказать я вообще в правильном направлении или нет?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
public class Contact {
    
    String contactName;
    static String localPart, domain, twitterId, instagramId, title, id;
    boolean addphone = true;
    int code;
    private static String flag;
    String number;
 
    public Contact(String contactName) {
        this.contactName = contactName;
        addphone = true;
    }
    public void rename(String newName) {
        //Implement this method
    }
    //**************************************************************************** 
    public Email addEmail(String localPart, String domain) {
        int x = 0;
        if(x++ == 2 || localPart == null || domain == null) {
            return null;
        }
        Contact.localPart = localPart;
        Contact.domain = domain;
        return new Email();
    }
 
    public Email addEpamEmail(String firstname, String lastname) {
        int x = 0;
        if(x++ == 2 || firstname == null || lastname == null) {
            return null;
        }       
        Email email = new Email() {
            @Override
            public String getTitle() {
                return "Epam Email";
            }
            @Override
            public String getValue() {
                return firstname + "_" + lastname + ".epam.com";
            }           
        };
        return  email;
    }
   // *****************************************************************************
    public Social addTwitter(String twitterId) {
        flag = "twit";
        Contact.twitterId = twitterId;
        return new Social();
    }
 
    public Social addInstagram(String instagramId) {
        flag = "insta";
        Contact.instagramId = instagramId;
        return new Social();
    }
 
    public Social addSocialMedia(String title, String id) {
        flag = "socmedia";
        Contact.title = title;
        Contact.id = id;
        return new Social();
    }
    //**************************************************************************************
    public ContactInfo addPhoneNumber(int code, String number) {
        if(!addphone) {
            return null;
        }
        this.code = code;
        this.number = number;
        ContactInfo phone = new ContactInfo() {
            @Override
            public String getTitle() {
                return "Tel";
            }
            @Override
            public String getValue() {
                return "+" + code + " " + number;
            }           
        };
        addphone = false;
        return phone;
    }
  //****************************************************************************************  
    public ContactInfo[] getInfo() {
        ContactInfo[] list = new ContactInfo[9];
        list[0] = new NameContactInfo();       
        list[1] = this.addPhoneNumber(code, number);
        list[2] = 
        
 
        return list;
    }
    //************************************************************NameContactInfo******************************************
  private class NameContactInfo implements ContactInfo{
 
        @Override
        public String getTitle() {
            return "Name";
        }
        @Override
        public String getValue() {
            return contactName;
        }       
    }
    //************************************************************Email***************************************************
  public static class Email implements ContactInfo{   
 
    @Override
    public String getTitle() {
        return "Email";
    }
    @Override
    public String getValue() {
        return localPart + "@" + domain;
    }
}
 //****************************************************************Social*****************************************
 public static class Social implements ContactInfo{
 
    @Override
    public String getTitle() {
        if(flag == "twit") {
            return "Twitter";
        }
        if(flag == "insta") {
            return "Instagram";
        }
        if(flag == "socmedia") {
        return title;
        }
        return null;
    }
    @Override
    public String getValue() {if(flag == "twit") {
        return twitterId;
    }
    if(flag == "insta") {
        return instagramId;
    }
    if(flag == "socmedia") {
    return id;
    }
        return null;
    }
 }
}
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
15.02.2024, 17:03
Цитата Сообщение от vanvanvan1 Посмотреть сообщение
int x = 0;
if(x++ == 2 || localPart == null || domain == null) {
return null;
уже не в правильном. x никогда не будет 2
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 17:09  [ТС]
Это да, это я сразу понял, просто пока ещё не исправил завис на массиве
0
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 17:23
Вы как вроде вообще ТЗ не читали и делаете все "по мотивам".

Попробуйте нарисовать скелет без единой строчки кода, одни только декларации. Это по факту уже будет много больше половины задания.

Читаете нужен класс Contact - создаете пустой класс Contact

Читаете нужен в нем конструктор с именем - создаете конструктор с параметром Staing name но никакого кода, никуда не присваиваете

Читаете что нужен интерфейс ContactInfo, декларируете пустой интерфейс ContactInfo

Читаете что имя будет храниться в отдельном классе Contact.NameContactInfo который имплементирует ContactInfo - создаете этот класс, пустой, внутри Contract, с implements ContractInfo

И вот так шаг за шагом создаете все классы, интерфейсы и методы, все пустое, без кода, но с правильным описанием всех параметров и возвращаемого результата. Потом добавляете везде где нужно поля, опять же внимательно читая ТЗ. Имя это не String, это NameContactInfo.

Java
1
2
3
4
5
6
public class Contact {
  private final NameContactInfo name;
...
  public Contact(final String name) {
    this.name = new NameContactInfo(name);
...
Смысл задания именно в точности воспроизвести ТЗ, а не сделать "то же самое и даже лучше", если вы считаете что по другому было бы лучше, можете это написать в сопроводительном тексте, мол я бы задизайнил проект иначе, вот так и так, но сделал именно как вы требовали.
1
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 17:38  [ТС]
В задаче уже был дан скелет и надо организовать логику, так вот я это и не могу сообразить, вроде читаю, может то что по английскому тяжело понять
0
156 / 62 / 16
Регистрация: 12.12.2023
Сообщений: 389
15.02.2024, 17:46
В задаче класс Contact должен хранить в качестве полей объекты типов NameContactInfo, Email, Phone, Social.

А не String twitterId
1
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
15.02.2024, 21:41  [ТС]
вроде начинаю догонять, просто учусь паралельно с основной работой и немного тяжело всё даётся. спасибо за помощь,как одолею то отпишусь!
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
16.02.2024, 20:30  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
public class Contact {
    
    private String contactName;
    
    private final NameContactInfo name;
    private final Email[] email = new Email[3];
    private final Social[] social = new Social[5];
    private ContactInfo phone;
    
    private int mailCount = 0;
    private int socialCount = 0;
    private int phoneset = 0;
    private int z = 0, count = 1;
 
    public Contact(final String contactName) {
        this.name = new NameContactInfo(contactName);
    }
    public void rename(String newName) {
    }    //*********************************************************************************************     
    public Email addEmail(String localPart, String domain) {
        if(mailCount == 3 || localPart == null || domain == null){
            return null;
        } 
        count++;
        return email[mailCount++] = new Email(localPart, domain);
    }
 
    public Email addEpamEmail(String firstname, String lastname) {
        if(mailCount == 3 || firstname == null || lastname == null){
            return null;
        }
        Email email = new Email(firstname, lastname) {
 
            @Override
            public String getTitle() {
                return "Epam Email";
            }
            @Override
            public String getValue() {
                return firstname + "_" + lastname + "@epam.com";
            }           
        }; 
        count++;       
        return this.email[mailCount++] = email;
    }
    //*******************************************************************************************
    public Social addTwitter(String twitterId) {
        if(socialCount == 5) {
            return null;
        }
        count++;
        return social[socialCount++] = new Social("Twitter", twitterId);
    }
 
    public Social addInstagram(String instagramId) {
        if(socialCount == 5) {
            return null;
        }
        count++;
        return social[socialCount++] = new Social("Instagram", instagramId);
    }
 
    public Social addSocialMedia(String title, String id) {
        if(socialCount == 5) {
            return null;
        }
        count++;
        return social[socialCount++] = new Social(title, id);
    }
    //*******************************************************************************************
    public ContactInfo addPhoneNumber(int code, String number) {
        if(phoneset > 0) {
            return null;
        }
        phone = new ContactInfo() {
            @Override
            public String getTitle() {
                return "Tel";
            }
            @Override
            public String getValue() {
                return "+" + String.valueOf(code) + " " + number;
            }           
        };
        count++;
        phoneset++;
        return phone;
    }
    //*********************************************************************************************
    public ContactInfo[] getInfo() {
        
        ContactInfo[] list = new ContactInfo[count];
        list[z++] = name;
        if(phone != null) {
            list[z++] = phone;
        }
        for (int i = 0; i < mailCount; i++) {
            list[z++] = email[i];;
        }
        for (int i = 0; i < socialCount; i++) {
            list[z] = social[i];
            if(z == count -1)
                return list;
            z++;
        }
        return list;
    }
    //************************************************************NameContactInfo******************************************
  private class NameContactInfo implements ContactInfo{
 
 
        public NameContactInfo(String contactName) {
            Contact.this.contactName = contactName;
        }
        @Override
        public String getTitle() {
            return "Name";
        }
        @Override
        public String getValue() {
            return contactName;
        }
        
    }
    //************************************************************Email***************************************************
  public static class Email  implements ContactInfo{
        private final String firstname;
        private final String lastname;
        Email(String firstname, String lastname){
            this.firstname = firstname;
            this.lastname = lastname;
        }
        @Override
        public String getTitle() {
            return "Email";
        }
        @Override
        public String getValue() {
            return firstname + "@" + lastname;
    }
}
 
 //****************************************************************Social*****************************************
 public static class Social implements ContactInfo{
 
     private final String socialname;
     private final String id;
     public Social(String socialname, String id) {
         this.socialname = socialname;
         this.id = id;
     }
    @Override
    public String getTitle() {
        return socialname;
    }
    @Override
    public String getValue() {
        return id;
    }
Не могу понять как сделать чтоб массив в методе Cotact.getInfo() не выходил за граници
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 28
18.02.2024, 16:41  [ТС]
всё разабрался спасибо большое!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2024, 16:41
Помогаю со студенческими работами здесь

Задание из курса coursera с которым я не могу справиться
Ваша структура данных будет представлять собой отсортированный список целей, которые будет собирать плюшевый мишка, что сделает его очень...

exp ругается=) (или задание для первого курса)
Вообщем, дамы и господа. Вопрос довольно смешной. Только начала изучать C. Есть следующие задание. Нужно создать новый проект, который...

глупая студентка 1-го курса не может решить элементарное задание
Вычислить кол-во и среднее арифметическое вводимых четных и нечетных чисел. При вводе нуля закончить работу Добавлено через 5 часов 54...

Задача из базового курса JAVA
Добрый день! Помогите правильно расставить строки или хотя бы объясните как должен проходить процесс, я его не совсем понимаю. ...

Java. Студент 3 курса ищет стажировку на лето, желательно с последующий трудоустройством
Учусь по специальности &quot;Компьютерная математика и программирование&quot;. Хочу найти стажировку на лето(можно даже неоплачиваемую), очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru