好吧,也许我只是因为这个而累了,但是我怎么才能做到这一点呢?
int x = Integer.MAX_VALUE+10;//或者可能
int x = Integer.MIN_VALUE-20;我只想让if语句捕捉到x是否在“范围内”,就像这样:
if(x >= Intefer.MAX_VALUE || x <= Integer.MIN_VALUE){ //throw exception}但问题是,如果该值如上所述,如MAX_VALUE + 10,则该值最终既不高于最大值,也不低于MIN_VALUE,并且不满足if条件……
编辑:为了澄清我的意思:我不想实际存储任何大于最大/最小值的值。想象一下:
一个字段,你编写10+10,然后它会说“好吧,这是20”,下一步,有人可能会写1000000*100000,它也会返回答案,但然后有人可能会写一些超过最大/最小值的东西,比如,10000000*1000000*1000000或类似的东西,然后程序应该都像“等等,太高了!这里有一个"0”给你。“
发布于 2012-09-09 03:00:30
这可以通过两种方式解决:
第一种方法:
if(x + 10 <= x){ //Has wrapped arround so throw exception}
第二种方式(更好):
long x = Integer.MAX_VALUE+10L;
现在条件可以正常工作了
if(x >= Integer.MAX_VALUE){ //throw exception}
发布于 2012-09-09 02:54:30
如果需要表示大于或小于限制的整数,则使用long而不是int变量。另一方面,如果您真的担心包含大于Integer.MAX_VALUE的值的int变量,那么请不要担心--这样的东西是不存在的。当该值存储在int中时,任何溢出或下溢都已经发生。
发布于 2014-03-14 12:16:57
之前提供的所有解决方案的问题是,它们都建议向上转换为更大的基元来执行计算(例如使用long而不是int)。
这种方法有点笨手笨脚,当你已经在使用最大的原语时就会失败。相反,您可以在执行操作之前检查以查看加法或减法等操作是否会溢出。
下面是The CERT Oracle Secure Coding Standard for Java中的一个函数,它还为减法等其他数学运算符提供了等效函数。
static final int safeAdd(int left, int right) throws ArithmeticException {
if (right > 0 ? left > Integer.MAX_VALUE - right
: left < Integer.MIN_VALUE - right) {
throw new ArithmeticException("Integer overflow");
}
return left + right;
}https://stackoverflow.com/questions/12333541
复制相似问题