2013-11-20 5 views
0

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

У меня есть три ползунка (S1, S2, S3). Каждый из ползунков имеет значение минус 0 и максимальное значение (каждое из значений между ними составляет int). Общая сумма этих трех ползунков никогда не может превышать 50. Это может быть, конечно, < = 50 и> = 0, но никогда не < 0.

Например, если начальные значения S1 = 20, S2 = 11 , S3 = 3. Как подключить эти ползунки так, чтобы, если я изменил, например, S3 от значения 3 до значения 23, тогда другие слайдеры должны изменить свои значения так, чтобы они всегда находились между интервалом 0 и 50. Или если я измените S1 с 20 на значение 50, тогда оба S2 и S3 должны переместиться на 0.

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

double newValue1 = 0; 
double newValue2 = 0; 
if((S1 + S2 + S3) > maxAntalRum) { 
    diff = max - (S1 + S2 + S3); // the diff if tot value of S1-S3 exceeds 50 
    newValue1 = floor(diff/2); // new values are divided upon the 2 sliders that we are not changing (i.e. S2 and S3). Value rounded off up. 
    newValue2 = ceil(diff/2);  // Value rounded off down. 
    S2 += newValue1; 
    S3 += newValue2; 
    sliderS2.setValue(S2); 
    sliderS3.setValue(S3); 

Я как бы застрял. Как мне решить эту проблему? Или с какого угла я должен его обработать?

С уважением,

Анна

ответ

1

Я думаю, что вы очень много получили. Разумеется, вам понадобится аналогичный код для каждого слайдера. Кроме того, вам нужно будет проверить, что вы уже не настраиваете слайдер. (Если у вас было только два ползунка, вы можете пропустить это, проверив, будет ли значение ползунка уже правильным, но с тремя вы сразу измените два и за короткое время цифры не будут складываться.) Так что вы хотите что-то вроде этого:

private boolean gate = true; // Instance field. 

В методах:

if (gate) { 
    gate = false; 
    ... 
    // Your code here. 
    ... 
    gate = true; 
} 
+0

я не уверен, я понимаю эту логическую переменную полностью. Кажется логичным каждый раз, когда слайдер изменяется, чтобы проверить, находится ли S1 + S2 + S3 между 0 и 50, но что делать, если это не так. Иногда кажется, что ценность может стать отрицательной. Достаточно ли этого только с булевым var? – user2481390

+0

@ user2481390: Нет, булевы там, чтобы избежать бесконечного цикла. Ползунок один движется, поэтому вы настраиваете ползунок два, который теперь переместился, поэтому выполняется код _its_ и настраивается слайдер один, который регулирует ползунок два, что ... Вам нужно добавить код, чтобы установить отрицательный слайдер в ноль и вычесть количество от другого слайдера. Вам нужно будет поиграть с ним. _First_ попробуйте сделать так, чтобы слайдеры оставались в пределах допустимого диапазона, а затем пытайтесь заставить их двигаться как можно рациональнее. И попробуйте написать один метод, чтобы выполнить большую часть работы для всех трех слайдеров; вам придется сделать меньше корректировок и иметь меньше ошибок. – RalphChapin

+0

Спасибо. Думаю, я на самом деле решил это! – user2481390

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