Добавление номера в пределах диапазона (переполнение) - PullRequest
0 голосов
/ 28 августа 2018

Я снова. Вот так. Вернемся к этому с большим количеством ошибок новичка. Хех.

Мне было интересно, есть ли способ сделать это, потому что мне не везет в моих попытках, и мне нужна помощь кого-то более ... способного решать проблемы, чем я.

Я хотел бы иметь такую ​​функцию:

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;

Однако мне кажется, что это было бы очень неэффективно, поэтому кто-нибудь более знающий: пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...