2014-12-05 3 views
1

У меня есть диалог, отображающий кнопки в соответствии с настройками пользователей. Я хочу, чтобы кнопки были выстроены в лучшей последовательности строк 6. Значение, если пользователь вводил 1-6 записей, должна быть 1 строка из 6 кнопок. Если он ввел 7 записей, он не должен быть 6 в строках 1 и 1 по строке 2, а скорее 4 в строках 1 и 3 в строке 2. Если он ввел 8, он должен иметь по 4 кнопки в каждой строке И так далее .....Математическая формула для поэтапных сбоев

Будучи тем, что я несколько опытный разработчик, я чувствую себя немного немым этим .... но мне трудно понять правильный метод определения этих чисел программным путем.

Если кто-то может помочь мне с этим я был бы признателен за это

Спасибо, Дэвид

+1

Мы будем иметь трудное время программно найти эти цифры тоже, если язык программирования не помечено. – Compass

ответ

0

Если a/b является целочисленное деление и a % b остаток от деления a по b, то вам нужно

rows = (buttons + 5)/6 

ряда кнопок. Теперь вы можете просто делить на количество строк, чтобы найти лучшее разбиение. Если вы хотите, чтобы минимизировать абсолютную разность длин строк (на основе ноль), я-я строка может содержать, например,

buttons_in_line[i] = buttons/rows + (i < buttons % rows ? 1 : 0) 

кнопки. Например. Для 22 кнопок, вы получите следующую структуру:

# # # # # # 
# # # # # # 
# # # # # 
# # # # # 

Или для 19 кнопок:

# # # # # 
# # # # # 
# # # # # 
# # # # 
0

Я могу думать о нескольких решений здесь. Основная идея - выяснить, сколько строк вам нужно, а затем усреднять количество кнопок в строке. Трюк тогда имеет дело с неровными рядами.

rows = buttons/row_limit; 
buttons_per_row = buttons/rows; 

Затем можно добавить кнопки строк и следить за остаток, или использовать какие-рекурсивную функцию, которая имеет дело с остальными кнопками.

button_remainder = 0; 
for(row in rows) 
    row_buttons = math.floor(buttons_per_row); 
    buttons -= row_buttons; 

    button_remainder += buttons_per_row - row_buttons; 
    if(button_remainder >= 1) 
     row_buttons++; 
     buttons--; 

    row.setButtonCount(row_buttons); 

Рекурсивная функция аналогична, но она не отслеживает дробный остаток кнопки.

+0

@ Nikias - Спасибо. Прекрасно работает! exaccty, что я искал. Можете ли вы просто объяснить, что делает +5? @Bracket - Спасибо за усилие. Я искал что-то большее, чем решение nikias. – DaveyD

Смежные вопросы