Адаптация нескольких интерфейсов

  • 20
  • Недоступна
Адаптируй IncomeData к Customer и Contact. Классом-адаптером является IncomeDataAdapter. Инициализируйте countries перед началом выполнения программы. Соответствие кода страны и названия: UA Ukraine RU Russia CA Canada Дополнить телефонный номер нулями до 10 цифр при необходимости (смотри примеры).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (249)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Денис19 уровень, Москва
18 May, 20:36
с 10-й попытки) Кто больше? Вообще удобно смотреть по валидатору следующий шаг)
Евгений20 уровень, Vladimir
Tuesday, 20:25
Так же) Не учёл, что код страны может быть не только двухзначным
Денис19 уровень, Москва
Tuesday, 20:57
я вообще забил в этой задаче на количество попыток - написал один метод - в проверку - чтоб подсказку получить. Со следующей задачей так не прокатило - думаю создать 2 класса, реализовать их методы - чтобы тупо можно было отладить. Ну и регулярки изучить до того как следующую решать
Денис19 уровень, Москва
Tuesday, 21:00
Вот у меня 8 лет разработки в функциональном программировании - а тут вот в слепую что точно вернет та или иная конструкция операторов - не уверен. Нужна отладка - хоть запоминаешь что как работает. Например сабстринг - индексы с 0, но первый параметр - включая, а второй не включая
Badger19 уровень, Киев
17 May, 21:10
Сперва решил опробовать вариант с числами, не преобразовывая к строке, обломался на тестах - не подумал, что нули в начале каждой подстроки будут исчезать из номера. Потом пришел к такому варианту, где нулем дополняю только код в форматированном выводе:
@Override
public String getPhoneNumber() {
// getting substrings...
return String.format("+%s(%3s)%s-%s-%s",
        phoneCode, operatorCode, numberPart1, numberPart2, numberPart3)
        .replace(' ', '0');
}
Валидатор его не принял, но вариант рабочий. Пришлось добавлять ноль к номеру и по другому делить строку. Если отбросить угадайку с валидатором, задача понравилась.
Максим Сергеевич19 уровень, Харьков
16 May, 11:54
А в чем ошибка, почему такой вариант не проходит? Вывод правильный. Или в этой задаче валидатор только substring принимает?
String correctPhone = "***"; //здесь код + номер, приведенный к 10-digits формату.

            StringBuilder result = new StringBuilder(correctPhone)
                    .insert(0,"+")
                    .insert(3,"(")
                    .insert(7,")")
                    .insert(11,"-")
                    .insert(14,"-");

return result.toString();
Дмитрий Мальцев-Горский20 уровень, Москва
12 May, 14:38
Я закопался в задаче по той причине, что пытался сначала выводить конкатенацию строк getCountryPhoneCode() + getPhoneNumber() дополненную до длины в 10 символов. Такой метод не верен! Не обратил внимание на то, что требуется четкое форматирование номера телефона. То есть алгоритм этого момента такой: - получаем номер телефона getPhoneNumber() - дополняем getPhoneNumber() нулями с начала до длины в 10 символов. Пусть это будет String longPhoneNumber; - конкатенацией формируем из кода страны getCountryPhoneCode() и переменной longPhoneNumber номер телефона по такой маске +38(050)123-45-67 где +38 - это код страны с плюсом в начале (050)123-45-67 - это longPhoneNumber, то есть номер телефона из getPhoneNumber(), дополненный нулями с начала до длины в 10 символов. Проще всего добить нулями с начала используя механизм форматирования переменной String. Нашел для себя этот мануал вполне понятным: https://www.codejava.net/java-se/file-io/java-string-format-examples
Юлия Осадчук22 уровень
6 May, 10:12
кто хочет проверить и вывести номер телефона нужно в main создать
IncomeData data = new IncomeData()
дальше idea добавит методы и в методах getCountryPhoneCode() и getPhoneNumber() дописываете нужную информацию. После создаете contact типа Сontact и выводите
Contact contact = new IncomeDataAdapter(data);
System.out.println(contact.getPhoneNumber());
кому не понятно можно посмотреть как реализовано в первой задаче уровня
Дмитрий Малигон19 уровень, Санкт-Петербург
5 May, 14:23
Maxim19 уровень, Комо
30 April, 18:39
First of all, Ukrainian calling code is +380, not +38
Maxim19 уровень, Комо
30 April, 18:40
+38 – Discontinued (was assigned to the Socialist Federal Republic of Yugoslavia until its break-up)
Elija 20 уровень
28 April, 16:24
зачем тут регулярки и сложные конструкции, если все отлично проходит с одним единственным String numberFormat = String.format("%010d", number);
barracuda23 уровень, Санкт-Петербург
16 April, 21:28
Чем сложнее задачи (имею ввиду, с большим количеством вариантов решения), тем меньше шансов угодить валидатору, даже с работающим кодом.
Юрий23 уровень, Москва
23 March, 08:47
Вот такую строку приняли. String phoneNumber = "+" + String.format("%d(%2$s)%3$s-%4$s-%5$s", code, number.substring(0,3), number.substring(3,6), number.substring(6,8), number.substring(8,10)); А с такой строкой не принимали, код рабочий. String phoneNumber = "+" + String.format("%d(%s)%s-%s-%s", code, number.substring(0,3), number.substring(3,6), number.substring(6,8), number.substring(8,10));
Igor Bykov20 уровень, Москва
7 April, 11:48
у меня, кстати, приняло второй варик, только я "+" включил в форматированную строку