我有两个变量float a
和float b
。仅当boolean inRange
和a
都在b
和0.0f
之间时,我才想将1.0f
变量设置为true。我可以这样做:
boolean inRange = a >= 0.0f && a <= 1.0f && b >= 0.0f && b <= 1.0f;
但我想知道是否有更好的检查方法。有更干净的方式,或者可能更有效的方法吗?
答案 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);