Я снова. Вот так. Вернемся к этому с большим количеством ошибок новичка. Хех.
Мне было интересно, есть ли способ сделать это, потому что мне не везет в моих попытках, и мне нужна помощь кого-то более ... способного решать проблемы, чем я.
Я хотел бы иметь такую функцию:
local function numberAddWithinRange(numberStart, add, min, max)
local x;numberStart = numberStart + add;
if numberStart<min then
x = min + (numberStart*(numberStart>0 and -1 or 1)); -- - numberStart;
return numberAddWithinRange(max, -x, min, max);
elseif numberStart>max then
x = min + (numberStart*(numberStart>0 and -1 or 1));-- - numberStart;
print("X is:", x);
return numberAddWithinRange(min, x, min, max);
else
x = numberStart;
end;
return x;
end;
Это работает нормально, вроде.
Вы видите, что я хочу, чтобы это было то, что, когда я добавляю, скажем, 245 к 20, с диапазоном 25 и 50, он добавляет это снова и снова, переходя от 25 -> 50, 25 -> 50 до он достигает точки, где были использованы все «переполненные» числа, а затем возвращает оставшийся номер. (если max == 50, то 51 становится 26, а затем продолжает добавление и т. д.)
Однако, моя функция, кажется, не делает это правильно, и будь то ночное время или что-то еще, я не могу понять, как это исправить.
Для справки, "after2" должен быть равен "startNum", но это не так.
local startNum = 200;
local after = numberAddWithinRange(startNum, 400, 33, 127);
local after2 = numberAddWithinRange(after, -400, 33, 127);
print(after, after2, after2==startNum)
Я посмотрел вокруг, как в Google, так и в stackoverflow, и не нашел ничего, что могло бы помочь мне в этом.
Я, наверное, просто тупой ... но, надеюсь, есть кто-то, кто может мне помочь.
Я также знаю, что мог бы сделать это:
local gn = function(num, add, min, max)
for i=add<0 and -1 or 1, add do
num = num + (1 * (add<0 and -1 or 1));
if num > max then
num = min;
elseif num < min then
num = max;
end;
end;
return num;
end;
Однако мне кажется, что это было бы очень неэффективно, поэтому кто-нибудь более знающий: пожалуйста, помогите.