确定两个值是否在一定范围内的最干净,最可读的方法是什么?

时间:2017-08-04 20:43:39

标签: java

我有两个变量float afloat b。仅当boolean inRangea都在b0.0f之间时,我才想将1.0f变量设置为true。我可以这样做:

boolean inRange = a >= 0.0f && a <= 1.0f && b >= 0.0f && b <= 1.0f;

但我想知道是否有更好的检查方法。有更干净的方式,或者可能更有效的方法吗?

3 个答案:

答案 0 :(得分:6)

为它创建一个方法(有一个原因,函数是最古老的代码组织类型,它们可以工作!)

if(inRange(a) && inRange(b))
   ...

当然,这可以根据您的需要进行修改,但一般来说,另一种方法具有良好的名称是一个很棒的解决方案。此外,您不会在整个代码中分发1.0 / 0.0常量。

更通用的答案是创建一个RangeValidation类(假设您有其他验证类)

RangeValidation criticalRange=new RangeValidation(0.0, 1.0);

criticalRange.validate(a);
criticalRange.validate(b);

这个模式起初有些冗长,但它可以用作验证系统的一部分 - 想象一下,许多不同类型的验证对象都可以使用简单的allValidations.validate(a)对一个值运行。对于标量不是很有价值,但该模式可用于验证更复杂的对象

答案 1 :(得分:1)

实现这一点并没有更有效的方法,但在我看来,它绝对可以“更清洁”。实现此目的的一种方法是为边界定义常量。其次,使用辅助方法调用以检查单个值可以提高主方法的可读性。请参阅下面的示例

public class YourClass {
    private static final float FLOOR = 0.0f;
    private static final float CEILING = 1.0f;

    public boolean inRange(float a, float b) {
        return inRange(a) && inRange(b);
    }

    private boolean inRange(float x) {
        return x > FLOOR && x < CEILING;
    }
}

答案 2 :(得分:1)

创建方法:

public boolean inRangeMethod(float a){
                return (a>=0.0f && a<=1.0f);
            }

后:

boolean inRange = false;
inRange = inRangeMethod(a) && inRangeMethod(b);