我试图检查一个值是否等于+或 - 2是另一个值.
这就是我遇到的.
for (int lineNumber : errorLineList) {
if (lineNumber == startLineNumber
|| lineNumber == (startLineNumber + 1)
|| lineNumber == (startLineNumber + 2)
|| lineNumber == (startLineNumber - 1)
|| lineNumber == (startLineNumber - 2)) {
lineFound = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我想要容差为5,那么我必须添加10个检查.
在java中有没有其他优雅的方法来做到这一点.
Pet*_*rey 21
在使用双精度时通常需要这样做,因为您可以获得较小的舍入误差.
if(Math.abs(lineNumber - startLineNumber) <= 2)
Run Code Online (Sandbox Code Playgroud)
您可以将2更改为5.这就是说; 如果两个值之间的差值小于2.即它可以是-2,-1,0,1或2.
对于double类似的解决方案是使用测试"相等"
if(Math.abs(a - b) < ERR) // where ERR is 1e-4 or 1e-9
Run Code Online (Sandbox Code Playgroud)
ERR的良好价值取决于具体情况.
您对价值差异感兴趣.你不在乎什么价值更高,你只是对他们的差异感兴趣.我们可以通过获得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, ..
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11151 次 |
| 最近记录: |