|
|
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
Сам себе задачку придумал, хотелось бы реализовать, но как-то не сталкивался с подобным. Имеем массив, который содержит перечень минут. Integer[] minutesArray = new Integer[]{0, 10, 15, 20, 30, 40, 50}; И вот начал писать метод, который в зависимости от текущего времени должен возвращать одно из значений этого массива. Пока корявенько его назвал и он пока возвращает только текущее значение минут. На всякий случай поясню: текущее время 21:12:36:154, возвращаемое значение будет 12 это в методе ниже Код: java 1. 2. 3. 4. 5. Вот думаю, как бы поаккуратнее написать так, что если сейчас 12 минут, то возвращается 10, если 13, то 15, если 36, то 40 и т.д. Пока пришло в голову только перелопатить в цикле массив и вычитать из данных массива текущее значение минут, при минимальном "отклонении" брать это значение массива и возвращать его. Может еще есть варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 19:16 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
Начните с изучения Java 8 date time API. А то больно смотреть на такие методы. Выравнивание обязательно по массиву должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 22:03 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
По поводу поиска ближайшего значения есть масса вариантов оптимизаций. Начать с хотя бы бинарного поиска. Самым быстрым решением может быть массив в 60 элементов. Ведь минут всего 60. Для гипотетически очень длинной минуты можно ещё подумать над вариантами. Для длинной минуты можно было бы построить индекс чтобы по значению быстро найти подмасссив для поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 22:17 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПо поводу поиска ближайшего значения есть масса вариантов оптимизаций. Начать с хотя бы бинарного поиска. Самым быстрым решением может быть массив в 60 элементов. Ведь минут всего 60. Для гипотетически очень длинной минуты можно ещё подумать над вариантами. Для длинной минуты можно было бы построить индекс чтобы по значению быстро найти подмасссив для поиска. Тут даже не 60, а максимум 12 значений от 0 до 55 через каждые 5 минут(может вообще 4 будет: 0, 15, 30, 45). Выравнивание обязательно по массиву, да. Просто делаю выпадающий список(комбобокс в vaadin) в котором будет 6-9-12 значений времени, которые пользователь будет выбирать ручками. Все потому что стандартный в 60 минут он ппц какой длинный и как кастомизировать сам компонент я не нашел. Вообще. После инициализации этого компонента ему нужно сразу присвоить какое-то значение setValue(int), взять минуты у new Date(), сравнить со значениями в массиве и в нем выбрать наиболее близкий вариант и присвоить компоненту. Java 8 date time API, вскоре гляну, мне оно не срочно, главное чтобы красиво было как решение. Поиски тоже гляну, давно уже с ними не сталкивался да и не часто и вообще забыл их суть )) спасибо, пошел читать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 22:43 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
Если у вас ещё и фиксированный интервал, то совсем не интересно. Даже массив не нужен. Обычного деления достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2016, 22:51 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕсли у вас ещё и фиксированный интервал, А ведь по началу было 0,10,15,20 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2016, 00:01 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевА ведь по началу было 0,10,15,20 :) Ну, да. Вот я и подумал, что задача гипотетическая. Потому как для реального мира совсем просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2016, 08:20 |
|
||
|
Cобственные "правила округления" java :)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСергей АрсеньевА ведь по началу было 0,10,15,20 :) Ну, да. Вот я и подумал, что задача гипотетическая. Потому как для реального мира совсем просто. Ну и в реальном мире бывают задачи поиска ближайшего соседа. Хотя задача запуска каждую n-ю минуту попроще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2016, 09:25 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=84&tid=2123554]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
3ms |
| others: | 220ms |
| total: | 354ms |

| 0 / 0 |
