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

  • 20
  • Недоступна
Давай представим ситуацию, что с одной стороны у нас есть некая база данных, в которой хранятся данные. База данных имеет стандартный набор команд (методов) для предоставления данных, они описаны в интерфейсе IncomeData. Примеры представления данных приведены в комментариях около каждого метода. С другой стороны есть пользователи
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (392)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Василий
Уровень 25
вчера, 14:36
Задачка офигенская, и простая и важная для понимания адаптера. Чего рейтинг то такой плохой?!
Сергей
Уровень 28
15 мая, 18:03
Задача понравилась. Пришлось помучиться с getPhoneNumber. Не пойму почему не хотел брать s = String.format("+" + data.getCountryPhoneCode() +..... Принял только со String.valueOf(data.getCountryPhoneCode())....
Anonymous #3232154
Уровень 37
20 апреля, 15:53
Серьезно? отказ валидатора из-за названия переменной не такой как в правильном решении?
Виктор
Уровень 29
13 апреля, 09:46
Вдруг кому интересен будет вариант с regex и Matcher'ом.
public String getPhoneNumber() {
            int phoneN = data.getPhoneNumber();
            int phoneCode = data.getCountryPhoneCode();
            String phoneNumber = String.format("%010d", phoneN); // добавляем нули
 к строке номера до 10 символов в сумме.
            Pattern patternPhone = Pattern.compile("(\\d{3})(\\d{3})(\\d{2})(\\d{2})");
//создаем паттерн. В нем будем делать
//блоки ограниченные скобками по нужному количеству символов
(\\d{3})) - блок из цифр в количестве 3 штук. И т.д.
            Matcher matcher = patternPhone.matcher(phoneNumber); //создаем матчер
 //который будет искать совпадения.
            String fullNumber = "+" + phoneCode + matcher.replaceAll("($1)$2-$3-$4");
 //используем  matcher.replace и указываем как нам нужно форматировать текст.
//Блоки указанные ранее в скобках можно вызывать с помощью $n - где n номер блока.
//Таким образом можно, например, создать строку содержащий блоки в другом порядке.
//Или добавить символы вроде скобок и дефисов между блоками.
            return fullNumber;
        }
Увидел такое решение в курсе Трегулова в теме регулярных выражений. Там это использовалось в примере чтобы спарсить с файла с кучей цифр без пробелов номер карты, с датами и cvc кодом и сохранить их в нормальном виде.
Василий
Уровень 25
вчера, 14:13
Вот это интересно! Пасиб)
JogaBonit0
Уровень 32
8 апреля, 20:29
Просто ачешуел когда увидел эту кракозябру в решении. Вообще получается не понял, что по итогам хотели от меня. я думал просто добавить нулей, а тут убийца глаз
LukasKeyn
Уровень 37
31 марта, 08:54
StringBuilder builder = new StringBuilder();
            builder.append("+");
            Integer a = data.getCountryPhoneCode();
            builder.append(a);
           Integer i = data.getPhoneNumber();
            if( i.toString().length() > 8) {
                builder.append("(0" + i.toString().substring(0, 2) + ")" + i.toString().substring(2, 5) +"-" + i.toString().substring(5, 7) +"-" + i.toString().substring(7,9));
            }
            else {
                builder.append("(00" + i.toString().charAt(0) + ")" + i.toString().substring(1, 4) +"-" + i.toString().substring(4, 6) +"-" + i.toString().substring(6,8));
            }
            return builder.toString();
            }
Почему не принимает?
ExQII
Уровень 30
13 апреля, 14:21
А как ты думаешь, если phoneNumber будет больше 8 или 9 символов, твой код корректно отработает?
Женя Иващенко
Уровень 32
20 мая, 12:56
Если у тебя переменная i = 10 символов, на выходе будет 11 символов(что не принимаеться), и так же если переменная i = 5, например символов, то у тебя в итоге будет 7 символов(что тоже не принимаеться), нужно заполнить нулями как написано в задаче.
Антон
Уровень 35
30 марта, 12:39
Наученный опытом предыдущих задач, назвал переменную incomeData. Но на этот раз валидатору нужно название просто data! Серьезно? На этот раз просто data? И в этом "ошибка"? Да, я понимаю, что в требованиях это было, но там очень часто пишут прямые ответы к задаче, потому читать требования до валидации во множестве случаев равно заглянуть в решебник.
Anonymous #3137196
Уровень 25
15 мая, 15:02
Так там еще и формат нужно строго определенным способом реализовать. Рофл какой-то
Rustam Garant
Уровень 35
29 марта, 07:49
Подскажите: Эта строка же по сути должна создавать 0000000501, т.к. первые три символа 501 и добавление нулей до 10 знаков, почему создаётся только 050?
String.format("%010d", data.getPhoneNumber()).substring(0, 3),
Rustam Garant
Уровень 35
29 марта, 08:57
дошло
LukasKeyn
Уровень 37
31 марта, 09:50
поделишься?
Rustam Garant
Уровень 35
3 апреля, 06:18
501234567 - результат data.getPhoneNumber(), затем 0501234567 - результат ("%010d", data.getPhoneNumber()), 050 - результат substring(0, 3)
Eldar K.
Уровень 39
Expert
21 марта, 09:38
Может кому поможет, все выводило корректно. голову сломал почему валик не пропускает. Оказывается делал все для двузначного кода страны 38. в этом и был косяк. В итоге не с добавления кода начал формировать стрингбуфер, а наоборот в конце приклеил и все стало гуд=)
ꍟmpty꓅uple
Уровень 35
Expert
15 марта, 13:37
Если используете StringBuilder в реализации getPhoneNumber() будьте бдительны! Валидатор не примет: stringBuilder.append(data.getCountryPhoneCode()); Но примет если сохраните код в переменной в теле функции, и потом передадите ее в StringBuilder.