我几乎不好意思问这个问题,因为它可能非常明显 - 但我看不出这个整齐的方式,怀疑有一个。简单的数学 - 计算一个数字的滚动窗口(aha!负模量/余数!!)
我有一个变量,我需要添加/减去值 - 但我想保持它的值范围内,在任何一端循环 - 例如,
范围是0-3这样的值是0,1,2,3,0,1,2,3 - 这这是否
x = (x + val) MOD 4
当val为负,但是,我们应该看到0 ,3,2,1,0,3,2,1和解决方案远不如优雅
x = (x + val) MOD 4
if (x < 0) x = 4 + x;
这样的作品,但它是笨重,我不禁想有可能是一个“一条线”解决方案对此 - 但如果我能想到它,我会被诅咒吗? :)
准备尴尬
为什么它必须是一行? – Raedwald
适当的模数运算符已经这样做了。如果使用余数运算符(在编程语言中通常使用'%')来实现这一点,那么行为会随着负数而变化,并且需要您发布的两行代码。换句话说:您可能使用了余数运算符而不是正确的模数运算符。 – TaZ
@raedwald它可能是50行,如果它是优雅的,看起来和感觉像一个bodge :) – shrewdlogarithm