如何解决我怎样才能使两个值一致地相互约束?
我有两个变量,static int16_t min
和 static int16_t max
。
我希望他们constrain彼此,以便
-
min
永远不会大于max
,并且 -
max
永远不会小于min
。
此外,每个值都需要限制在 0 - 15 的值范围内(变量被声明为 int16_t,因为除了这个特定实例的范围之外,它们还有多种用途)。
我尝试了以下代码:
min = constrain(min,max);
max = constrain(max,min,15);
这对 min
的值有效,意思是:一旦 min
增加到 max
,它不会增加超过 max
的值。另一方面,当 max
的值减小到等于 min
的值时,它会不断减小两个值,直到它们都减小到 0。
我很难弄清楚如何解决逻辑问题,并且希望得到任何建议使两个值的逻辑保持一致,所以换句话说,我会接受解决方案这要么使:
解决方法
简答:封装。
你所描述的是一个不变量。不变量由用户定义的数据类型通过封装私有数据来保证,并且仅向用户提供对将不变量作为后置条件的方法的访问权限。
仅概述想法:
class min_max {
int min;
int max;
void normalize_min() { if (min > max) min = max; }
void normalize_max() { if (max < min) max = min; }
public:
min_max(int a,int b) : min(std::min(a,b)),max(std::max(a,b)) {}
void set_min(int x) {
min = x;
normalize_max();
}
void set_max(int x) {
max = x;
normalize_min();
}
int get_max() { return max; }
int get_min() { return min; }
};
从课堂外无法达到max < min
的情况。
考虑 Yakk 对您的问题的评论。我不确定你真正想要什么,对于上面我假设在调用 mm.set_max(a)
后我们可以断言 mm.get_max() == a
并且只有 min
被调整(反之亦然 set_min
) .其他解决方案也是可能的,例如,当用户尝试设置大于 max
的 min
或以不同方式发出错误信号时,您可以抛出异常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。