Чат (19)

  • 28
  • Недоступна
Сейчас будем реализовывать класс BotSocketThread, вернее переопределять некоторые его методы, весь основной функционал он уже унаследовал от SocketThread. 1) Переопредели метод clientMainLoop(): а) С помощью метода sendTextMessage() отправь сообщение с текстом "Привет чатику. Я бот. Понимаю команды
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (166)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Николай Т.
28 уровень, Рязань
вчера, 23:30
Забыл что у меня сервер запрашивает порт молча :)
Лёхансан
39 уровень, Брест
21 апреля, 18:47
Если вам, как и мне, показалось, что будет прикольно создать поле
private Map<String, DateFormat> formatters
и инициализировать его в конструкторе, а после этого просто обращаться к нему из метода processIncomingMessage() - бросьте эту мысль. Валидатор не примет такое решение. И будет упорно твердить, что вы не выполняете пунк 3 и 4. В общем, я очень огорчен: задача крутая, но валидатор просто отстой.
vitaliy bill
39 уровень
21 апреля, 17:18
":" != ": "
Бельчонок Изи
30 уровень, Казань
21 апреля, 15:30
Устала бороться с компилятором по 3 пункту! Всё работало, решение было подобным правильному, нужные проверки добавила, но нет, не проходило. Пришлось просто скопипастить правильное решение, так и не разобралась, в чем причина.
ivasvi
28 уровень, Санкт-Петербург
14 апреля, 22:42
Валидатор, гори в аду!
Даниил Александрович
31 уровень, Тамбов
24 марта, 11:35
вот жеж хрень! в мобиле вышел за скобки класса... и пол дня мучался не догоняя причину. Если у вас не проходит 3 пункт убедитесь что:
processIncomingMessage
находится в нутри
public class BotSocketThread
Удачи...
Maxim Работает в СберТех
26 января, 16:20
Потратил 5 попыток на то, что зачем-то запрашивал дополнительно сообщение и уже из него искал команды, вместо того, чтобы использовать переданный параметр в метод. 🤦‍♂️
Aleksandr
41 уровень
24 января, 15:19
3 попытки лесом. из-за split("[: ]") вместо split(": ") , а ругалось на неправильный вывод даты
Lev Moiseev Software Developer в FirstBit
21 января, 17:01
// а) Вывести в консоль текст полученного сообщения message
ConsoleHelper.writeMessage(message);
if (message == null) return;

// б) Получить из message имя отправителя и текст сообщения. Они разделены ": "
String[] parts = message.split(": ");
if (parts.length != 2) return;

// Соответствие текста сообщения и формата
HashMap<String, String> map = new HashMap<>();
map.put("дата", "d.MM.YYYY");
map.put("день", "d");
map.put("месяц", "MMMM");
map.put("год", "YYYY");
map.put("время", "H:mm:ss");
map.put("час", "H");
map.put("минуты", "m");
map.put("секунды", "s");

String pattern = map.get(parts[1]);
if (pattern == null) return;

// в) Отправить ответ в зависимости от текста принятого сообщения
String answer = new SimpleDateFormat(pattern).format(Calendar.getInstance().getTime());
sendTextMessage(String.format("Информация для %s: %s", parts[0], answer));
Maxim Работает в СберТех
26 января, 14:42
Отлично придумал! Молодец! Я хотел сначала через обычный двумерный массив сделать. Потому передумал и решил через обычные if-ы.
Aleksandr Alekseenko Network engineer
25 апреля, 01:50
Очень понравился подход к решению. Во-первых, открыл для себя, так называемый, пустой return. Во-вторых, если использовать switch, то будет много повторяющего кода (последние 2 строки). И надо создавать еще один метод. В данном случае, автор избежал такой потребности.
Vadim
35 уровень
18 января, 19:12
решил делать через switch, в итоге ловил ошибки компилятора. Нужно было добавить в switch
default:
                        return;
Daniil kukushkin
33 уровень
22 января, 10:47
возможно у тебя не было проверки на двоеточие: if (!message.contains(":")) return; Потому что я тоже сделал через switch и при этом не добавлял default
Vadim
35 уровень
26 января, 23:13
было так до switch
if (message != null && message.contains(": "))
внутри ифа сплитовал по ": " на два элемента массива