Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7 8 9 10 .. 134   вперед  Ctrl
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
Как тебе такой вариант?

Я описал месяцы как у тебя. И сохранил семантику колонок и столбцов. И
даже добавил декодирование шифров месяцев. Я .. можно сказать используя Java-language
создал DSL который описывает твой интерфейс.

String[][] months = { 
  { "январь:j" ,  "февраль:f", "март:m",   "апрель:a" },
  { "май:mm" ,    "июнь:i",    "июль:ii",  "август:av" },
  { "сентябрь:s", "октябрь:o", "ноябрь:n", "декабрь:d" }
}


Дальше - дело техники. Допишешь InlineKeyboardMarkup сам?

 for(int i=0;i<months[0].length;i++){
   rowInline.add(new InlineKeyboardButton().setText(months[0][i].split(":",2)[0]).setCallbackData(months[0][i].split(":",2)[1]));
  } for(int i=0;i<months[1].length;i++){
   rowInline1.add(new InlineKeyboardButton().setText(months[1][i].split(":",2)[0]).setCallbackData(months[1][i].split(":",2)[1]));
  } for(int i=0;i<months[2].length;i++){
   rowInline2.add(new InlineKeyboardButton().setText(months[2][i].split(":",2)[0]).setCallbackData(months[2][i].split(":",2)[1]));
  }

вроде так,проверить не могу,но должно рабоать)
25 мар 19, 00:52    [21842316]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
Вот мой вариант. Писал в блокноте. Поэтому не проверил. Обрати внимание что в InlineKeyboardButton есть еще один
конструктор с параметром.

InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
for(int row = 0;row < 3; row++) {
     List<InlineKeyboardButton> rowInline = new ArrayList<>();
     for(int col = 0; col < 4; col++) {
          String value = months[row][col];
          rowInline.add(
              new InlineKeyboardButton(value.substr(0,value.indexOf(":"))
                        .setCallbackData(value.substr(value.indexOf(":")))
              );
     }
     rowsInline.add(rowInline);
}
markupInline.setKeyboard(rowsInline);


Наверное можно убрать еще и константы 3 и 4.
25 мар 19, 00:59    [21842318]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
Вот мой вариант. Писал в блокноте. Поэтому не проверил. Обрати внимание что в InlineKeyboardButton есть еще один
конструктор с параметром.

InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
for(int row = 0;row < 3; row++) {
     List<InlineKeyboardButton> rowInline = new ArrayList<>();
     for(int col = 0; col < 4; col++) {
          String value = months[row][col];
          rowInline.add(
              new InlineKeyboardButton(value.substr(0,value.indexOf(":"))
                        .setCallbackData(value.substr(value.indexOf(":")))
              );
     }
     rowsInline.add(rowInline);
}
markupInline.setKeyboard(rowsInline);



Наверное можно убрать еще и константы 3 и 4.

да мой вариант похуже,так как по большому счету нет нужны в трех листах с разным названием ,все прекрасно в локальный rowinline кладется, так как arraylist не требует уникальности значений,чего я из виду упустил .
25 мар 19, 01:13    [21842324]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
Бери. Пользуйся. Это универсальный билдер клавиатур.
25 мар 19, 01:15    [21842325]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
Бери. Пользуйся. Это универсальный билдер клавиатур.

спасибо) а как быть с простыней где я проверяю callbackquery и в зависимости от этого присваиваю переменной значение.
можно там как то сократить через мапу ?
25 мар 19, 01:18    [21842327]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
asv79
mayton
Бери. Пользуйся. Это универсальный билдер клавиатур.

спасибо) а как быть с простыней где я проверяю callbackquery и в зависимости от этого присваиваю переменной значение.
можно там как то сократить через мапу ?

Ну... тут я-бы сделал так. Эта простыня представляет собой декодирование трех
величин. Year. Month. Day. Три функции. У всех трех разная логика.


День - самый тривиальный. Мы просто проверяем что строка - является числом в диапазоне от 1 до 31.
В противном случае просто вернем пустую строку ""

Год. По сути тоже самое только проверяем на диапазон там от 1900 года до 2900.... хз какого.

Для месяца можно сделать мапу. Из строки - маппинг в строку-число представления месяца.

Дизайн интерфейса примерно такой:

public static String detectYear(String arg) {
  
  // TODO lika a day
  ...
}

public static String detectMonth(String arg) {
  Map<String,String> m2n = new HashMap<>(){{
     add("j","01");
     add("f","02");
     ..........
  }}
  
  // TODO
  ...........
  return m2n.get(arg);
}

public static String detectDay(String arg) {
    try{
       int res = parseInt(arg);
       if (res>=1 && res<=31) return arg;
    } catch(NumberFormatEx e) {}
    return "";  
}
25 мар 19, 01:38    [21842330]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton,простыня из 31 дня стала такой

for (int i = 1; i <=31 ; i++) {
   for (int j = 0; j <6 ; j++) {
    rowInline.add(new InlineKeyboardButton()
            .setText(Integer.toString(i))
            .setCallbackData(Integer.toString(i))
    );
   }rowsInline.add(rowInline);
  }
  markupInline.setKeyboard(rowsInline);
25 мар 19, 02:01    [21842334]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
Ну ОК. Затестил?
25 мар 19, 02:12    [21842338]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3381
asv79
изучаю я уже год и паттерны и чужой код и SOLID принципы блюдю))
мне нужен ввод в рабочий проект ,за 1-2 месяца ,что дают на onboard я вольюсь в проект 100%.
Свежо придание, да верится с трудом. За один месяц влиться в проект может либо сеньер и выше, либо гений. Стать сеньером за год без активного участия в проекте на интересуемом стеке? Ну можно, но нужно прямо вот взять, все бросить (а где еще взять время?) и начать активно обучаться 24x7.
25 мар 19, 06:52    [21842380]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
Ну ОК. Затестил?

нет пока не добрался idea.
целиком перепишу, затещу и на гитхаб выложу
25 мар 19, 09:45    [21842440]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
Андрей Панфилов
? Ну можно, но нужно прямо вот взять, все бросить (а где еще взять время?) и начать активно обучаться 24x7.

А мне негчего бросать,я в отличии от студентов уже имею все что мне нужно для жизни и быт налажен,поэтому могу учиться 24/7.
25 мар 19, 09:51    [21842448]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
Ну ОК. Затестил?

затестил ,немного не так рабоатет ,сейчас пилю интрфейс кейборд и имплементацию принимающую массив аргументов.
должно получиться красиво
25 мар 19, 20:38    [21843161]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
Андрей Панфилов
asv79
изучаю я уже год и паттерны и чужой код и SOLID принципы блюдю))
мне нужен ввод в рабочий проект ,за 1-2 месяца ,что дают на onboard я вольюсь в проект 100%.
Свежо придание, да верится с трудом. За один месяц влиться в проект может либо сеньер и выше, либо гений. Стать сеньером за год без активного участия в проекте на интересуемом стеке? Ну можно, но нужно прямо вот взять, все бросить (а где еще взять время?) и начать активно обучаться 24x7.

Всё относительно. Я был в гос-конторе инженером лидом а пришёл в аутсорсинг едвали мидлом.
И табель о рангах этот... я вас умоляю. А за рюмкой коньяка маститые синьоры
иногда признаются что ни-чер-та не понимают в каких-то базовых вещах типа там теории алгоритмов
ибо жисть была такая... образование левое. Около-техничекое. МДя.
25 мар 19, 20:56    [21843185]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton

// TODO
...........
return m2n.get(arg);
}

public static String detectDay(String arg) {
try{
int res = parseInt(arg);
if (res>=1 && res<=31) return arg;
} catch(NumberFormatEx e) {}
return "";
}

[/src]

не получается так -валится с намбер форматом программа,тоесть человек жмет например кнопку лидер -арга заходит в этот метод ничего и возвращает пустоту,тут видимо надо конктруцию иф -перебрать все варианты которые возращают кнопки типо лидер и тд и только потом дату вылавливать в блоке else наверно
26 мар 19, 00:44    [21843295]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
asv79
пропущено...

спасибо) а как быть с простыней где я проверяю callbackquery и в зависимости от этого присваиваю переменной значение.
можно там как то сократить через мапу ?

Ну... тут я-бы сделал так. Эта простыня представляет собой декодирование трех
величин. Year. Month. Day. Три функции. У всех трех разная логика.


День - самый тривиальный. Мы просто проверяем что строка - является числом в диапазоне от 1 до 31.
В противном случае просто вернем пустую строку ""

Год. По сути тоже самое только проверяем на диапазон там от 1900 года до 2900.... хз какого.

Для месяца можно сделать мапу. Из строки - маппинг в строку-число представления месяца.

Дизайн интерфейса примерно такой:

public static String detectYear(String arg) {
  
  // TODO lika a day
  ...
}

public static String detectMonth(String arg) {
  Map<String,String> m2n = new HashMap<>(){{
     add("j","01");
     add("f","02");
     ..........
  }}
  
  // TODO
  ...........
  return m2n.get(arg);
}

public static String detectDay(String arg) {
    try{
       int res = parseInt(arg);
       if (res>=1 && res<=31) return arg;
    } catch(NumberFormatEx e) {}
    return "";  
}


public class DateDetect {
   static String dayD;
   static String yearD;
    static String monthD;

    public static   void dateFind(String s) throws NumberFormatException{



        if(Integer.valueOf(s)<=31) {
            dayD = s;

        }


         else if(Integer.valueOf(s)>2000) {
             yearD = s;
         }

         else if (Integer.valueOf(s)>100&&Integer.valueOf(s)<2000 ){
             int i=Integer.valueOf(s)-100;
            monthD=String.valueOf(i);

        }
    }
}


вот написал класс детект даты ,потестил работает ,но иногда вылетает numberformat изза команд с других кнопок,Которые не парсятся в инт
26 мар 19, 01:57    [21843310]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
Вообщем все пофиксил что мог с силу своих знаний.
Знатоки оцените что еще можно привести божеский вид
https://github.com/apb12/TeleBot
26 мар 19, 02:41    [21843320]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3381
asv79
что еще можно привести божеский вид
https://github.com/apb12/TeleBot
Разве что удалить все и написать заново:
- классы без пакетов - это зашквар, их нельзя инстанциировать из классов с пакетами
- Key и KeyBoard - какая-то каша, нужно было хранить все это в каком-нить json/xml/csv и читать оттуда
- BaseDate - ресурсы текут как только можно
- BotStart - паттерном Command там и не пахло, куча SQL-инъекций
26 мар 19, 03:37    [21843331]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
asv79

вот написал класс детект даты ,потестил работает ,но иногда вылетает numberformat изза команд с других кнопок,Которые не парсятся в инт

Почему у тебя поля - статические?

Да numberformat будет вылетать. Потому что не все строки парсятся в числа. Это нужно
продумать на уровне дизайна интерфейса. Что вернуть если число не распарсилось?

Я лично не люблю бросать exceptions на этом уровне. Если есть возможность проверить
код ошибки то лучше проверить. Это касается функций конвертеров.
26 мар 19, 10:54    [21843499]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton
asv79
вот написал класс детект даты ,потестил работает ,но иногда вылетает numberformat изза команд с других кнопок,Которые не парсятся в инт

Почему у тебя поля - статические?

Да numberformat будет вылетать. Потому что не все строки парсятся в числа. Это нужно
продумать на уровне дизайна интерфейса. Что вернуть если число не распарсилось?

Я лично не люблю бросать exceptions на этом уровне. Если есть возможность проверить
код ошибки то лучше проверить. Это касается функций конвертеров.

Выброс еxption пофиксил.изменил конструкцию ифов теперь в дателетект прилетает уже нужеый аргумент.поля статические чтобы не мучиться с созданием экземпляра класса.
26 мар 19, 11:20    [21843528]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9620
mayton
Что вернуть если число не распарсилось?
Есть умолчание - его и вернуть.
Если умолчания нет - кинуть исключение.
В первом варианте разбор оборачивается в try/catch и подавляется исключение.
Во втором - просто разбор, а вызывающий уже решает, что делать с исключением.
26 мар 19, 11:24    [21843535]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
Андрей Панфилов
asv79
что еще можно привести божеский вид
https://github.com/apb12/TeleBot
Разве что удалить все и написать заново:
- классы без пакетов - это зашквар, их нельзя инстанциировать из классов с пакетами
- Key и KeyBoard - какая-то каша, нужно было хранить все это в каком-нить json/xml/csv и читать оттуда
- BaseDate - ресурсы текут как только можно
- BotStart - паттерном Command там и не пахло, куча SQL-инъекций

На счет пакетов согласен ,исправлю.
На счет key и keyboard что вам не нравится?первый интерфейс с одним методом и набором констант,второй его имплементация с одним методом.зачем городить огород в виде хмл если мне нужен набор контстант и с их храненением отлично справляется интерфейс.
Про ботстарт и команд,если вы не заметили все иньекции инкапсулированы а класс basedate является ресивером.да может выглядит не много не по феншую но это издержки интерфейса в виде диалога с пользователем.
На счет ресурсов что имеено куда течет поясните.
26 мар 19, 11:44    [21843556]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
Basil A. Sidorov
mayton
Что вернуть если число не распарсилось?
Есть умолчание - его и вернуть.
Если умолчания нет - кинуть исключение.
В первом варианте разбор оборачивается в try/catch и подавляется исключение.
Во втором - просто разбор, а вызывающий уже решает, что делать с исключением.

Я сейчас так слелал что до блока кода где работает класс dateDecect доходят лишь те значения которые могут распарситься в int
26 мар 19, 11:47    [21843558]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
mayton
Member

Откуда: loopback
Сообщений: 43440
Для целочисленных функций можно вернуть отрицательное число из диапазона.
Такой метод используется например в встроенных функциях String::indexOf() e.t.c.
Работает быстро и не плодит лишних объектов класса *Exception. Это важно для
перформанса.
26 мар 19, 11:56    [21843566]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2735
mayton,

Не посмотрите гитхаб ?что там еше можно улучшить ?человек вот ругается на класс BaseDate ,я так понимаю ищща того что я не делаю con.close
Но если его делать ничего не работает.просто вылазит exception типо соедеинение было закрыто.
Далее я вынесс инициализацию con в отлельный статик блок для того,чтобы не создавать каждый раз новое соединение ибо оно ограничиваеется 10 и если пользователь жмет 10 раз кнопку очень быстро соединение падает,в моем де варианте можно хоть жать кнопки до посиснения ничего не падает
26 мар 19, 12:34    [21843623]     Ответить | Цитировать Сообщить модератору
 Re: Где взять опыт?)  [new]
Лысый дядька
Member

Откуда:
Сообщений: 356
asv79,

Мозг начал ломаться на методе baseRead, которым ты делаешь ВНЕЗАПНО Insert запросы, продолжил ломаться на baseWrite, корорым ты селектишь, а потом я попробовал понять, зачем все это нужно и не осилил.
26 мар 19, 13:22    [21843683]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7 8 9 10 .. 134   вперед  Ctrl
Все форумы / Java Ответить