我想用一个整数减去另一个整数,结果应该为 0。所以 2 减 4 应该等于 0。我可以这样做
int result = x - y;
if (result < 0) result = 0;
但是有更优雅的方式吗?
SO是一场狗屎秀。感谢您的搭车。
虽然很多人都急于提出
Math.max(...)
解决方案,但我想提供一个简单的 if 语句。
if (y > x) {
result = 0;
} else {
result = x - y;
}
保证返回的结果始终为 0,不需要调用额外的堆栈帧(输入 Math 静态函数会),并且可以防止下溢。
在极少数情况下,X 接近最小整数,并且 y 足够大,计算 (x-y) 将导致下溢。结果将是“太大”的负数,无法容纳 int 的空间,因此会变成无意义的(可能是正数)答案。
通过强制 if 语句保证不存在下溢,该解决方案也比
Math.max(...)
解决方案更正确。然而,大多数人并不关心,因为他们很少处理接近导致溢出和下溢的数字。
使用三元运算符
?:
int result = (x - y) > 0 ? (x - y) : 0;