我试图检查一个值是否等于+或 - 2是另一个值。
这就是我所遇到的。
for (int lineNumber : errorLineList) {
if (lineNumber == startLineNumber
|| lineNumber == (startLineNumber + 1)
|| lineNumber == (startLineNumber + 2)
|| lineNumber == (startLineNumber - 1)
|| lineNumber == (startLineNumber - 2)) {
lineFound = true;
break;
}
}
但是如果我希望容差为5,那么我必须添加10个检查。
在java中还有其他优雅的方法吗?
答案 0 :(得分:20)
使用双打时经常需要这样做,因为你可以得到小的舍入错误。
if(Math.abs(lineNumber - startLineNumber) <= 2)
您可以将2更改为5.这就是说;如果两个值之间的差值小于2.即它可以是-2,-1,0,1或2。
对于double
,类似的解决方案是使用
if(Math.abs(a - b) < ERR) // where ERR is 1e-4 or 1e-9
使用ERR的好价值取决于具体情况。
答案 1 :(得分:6)
您对价值差异感兴趣。你不在乎什么价值更高,你只是对他们的差异感兴趣。我们可以通过lineNumber - startLineNumber
获得。这很好,但它产生正值和负值。因此,当我们得到这个差异的绝对值时,我们可以将它们的距离用于比较。
if ( Math.abs( lineNumber - startLineNumber ) <= 10 ) {
// values are in tolerance -10 .. +10, ... 21 values
// the range of tolerance in now simple changeable by one number
// .. the distance of values, which can be defined
// as a constant wherever you want,
// static final field, property file, ..
}
答案 2 :(得分:1)
当然:
int tolerance = 5; //or any other value you want...
for (int lineNumber : errorLineList) {
if(lineNumber <= (startLineNumber + tolerance) &&
lineNumber >= (startLineNumber - tolerance)){
lineFound = true;
break;
}
}
答案 3 :(得分:0)
怎么样
if (lineNumber >= (startLineNumber - 2) && lineNumber <= (startLineNumber + 2))